module Hid.UPG where
import Hid.HTypes

toPageName :: Int -> String
toPageName i
   | 0x01 == i   = "Generic Desktop"
   | 0x02 == i   = "Simulation Controls"
   | 0x03 == i   = "VR Controls"
   | 0x04 == i   = "Sports Controls"
   | 0x05 == i   = "Gaming Controls"
   | 0x06 == i   = "Generic Device Controls"
   | 0x07 == i   = "Keyboard"
   | 0x08 == i   = "LEDs"
   | 0x09 == i   = "Button"
   | 0x0A == i   = "Ordinals"
   | 0x0B == i   = "Telephony Devices"
   | 0x0C == i   = "Consumer Devices"
   | 0x0D == i   = "Digitizers"
   | 0x0E == i   = "Reserved"
   | 0x0E == i   = "PID Page"
   | 0x10 == i   = "Unicode"
   | 0x11 <= i && i <=0x13  = "Reserved"++(showihex i)++""
   | 0x14 == i   = "Auxiliary Display"
   | 0x15 <= i && i <=0x1F  = "Reserved"++(showihex i)++""
   | 0x20 == i   = "Sensor"
   | 0x21 <= i && i <=0x3F  = "Reserved"++(showihex i)++""
   | 0x40 == i   = "Medical Instruments"
   | 0x41 <= i && i <=0x7F  = "Reserved"++(showihex i)++""
   | 0x80 == i   = "Monitor"
   | 0x81 == i   = "Monitor Enumerated Values"
   | 0x82 == i   = "VESA Virtual Controls"
   | 0x83 == i   = "VESA Command"
   | 0x84 == i   = "Power Device"
   | 0x85 == i   = "Battery System"
   | 0x86 <= i && i <=0x87  = "Power Page"++(showihex i)++""
   | 0x88 <= i && i <=0x8B  = "Reserved"++(showihex i)++""
   | 0x8C == i   = "Bar Code Scanner"
   | 0x8D == i   = "Weighing Devices"
   | 0x8E == i   = "Magnetic Stripe Reader (MSR) Devices"
   | 0x8F == i   = "Reserved Point of Sale pages"
   | 0x90 == i   = "Camera Control Page"
   | 0x91 == i   = "Arcade Page"
   | 0x92 == i   = "Gaming Device"
   | 0x93 <= i && i <=0xFEFF  = "Reserved"++(showihex i)++""
   | 0xFF00 <= i && i <=0xFFFF  = "Vendor Defined Page "++(showihex i)++""
toPageName i =  error ("Page Name out of bounds "++ (show i))



toUsageName :: Int -> Int -> String
toUsageName i j
--  0001_desktop.upg
   | 0x01 == i  && 0x00 == j  = "Undefined"
   | 0x01 == i  && 0x01 == j  = "Pointer"
   | 0x01 == i  && 0x02 == j  = "Mouse"
   | 0x01 == i  && 0x03 == j  = "Reserved"
   | 0x01 == i  && 0x04 == j  = "Joystick"
   | 0x01 == i  && 0x05 == j  = "Game Pad"
   | 0x01 == i  && 0x06 == j  = "Keyboard"
   | 0x01 == i  && 0x07 == j  = "Keypad"
   | 0x01 == i  && 0x08 == j  = "Multi-axis Controller"
   | 0x01 == i  && 0x09 == j  = "Tablet PC System Controls"
   | 0x01 == i  && 0x0A == j  = "Water Cooling Device"
   | 0x01 == i  && 0x0B == j  = "Computer Chassis Device"
   | 0x01 == i  && 0x0C <= j && j <=0x2F = "Reserved"++(showihex i)++" "++(showihex j)++""
   | 0x01 == i  && 0x30 == j  = "X"
   | 0x01 == i  && 0x31 == j  = "Y"
   | 0x01 == i  && 0x32 == j  = "Z"
   | 0x01 == i  && 0x33 == j  = "Rx"
   | 0x01 == i  && 0x34 == j  = "Ry"
   | 0x01 == i  && 0x35 == j  = "Rz"
   | 0x01 == i  && 0x36 == j  = "Slider"
   | 0x01 == i  && 0x37 == j  = "Dial"
   | 0x01 == i  && 0x38 == j  = "Wheel"
   | 0x01 == i  && 0x39 == j  = "Hat switch"
   | 0x01 == i  && 0x3A == j  = "Counted Buffer"
   | 0x01 == i  && 0x3B == j  = "Byte Count"
   | 0x01 == i  && 0x3C == j  = "Motion Wakeup"
   | 0x01 == i  && 0x3D <= j && j <=0x3F = "Reserved01 "++(showihex j)++""
   | 0x01 == i  && 0x40 == j  = "Vx"
   | 0x01 == i  && 0x41 == j  = "Vy"
   | 0x01 == i  && 0x42 == j  = "Vz"
   | 0x01 == i  && 0x43 == j  = "Vbrx"
   | 0x01 == i  && 0x44 == j  = "Vbry"
   | 0x01 == i  && 0x45 == j  = "Vbrx"
   | 0x01 == i  && 0x46 == j  = "Vno"
   | 0x01 == i  && 0x47 <= j && j <=0x7F = "Reserved01 "++(showihex j)++""
   | 0x01 == i  && 0x80 == j  = "System Control"
   | 0x01 == i  && 0x81 == j  = "System Power Down"
   | 0x01 == i  && 0x82 == j  = "System Sleep"
   | 0x01 == i  && 0x83 == j  = "System Wake Up"
   | 0x01 == i  && 0x84 == j  = "System Context Menu"
   | 0x01 == i  && 0x85 == j  = "System Main Menu"
   | 0x01 == i  && 0x86 == j  = "System App Menu"
   | 0x01 == i  && 0x87 == j  = "System Help Menu"
   | 0x01 == i  && 0x88 == j  = "System Menu Exit"
   | 0x01 == i  && 0x89 == j  = "System Menu Select"
   | 0x01 == i  && 0x8A == j  = "System Menu Right"
   | 0x01 == i  && 0x8B == j  = "System Menu Left"
   | 0x01 == i  && 0x8C == j  = "System Menu Up"
   | 0x01 == i  && 0x8D == j  = "System Menu Down"
   | 0x01 == i  && 0x8E == j  = "System Cold Restart"
   | 0x01 == i  && 0x8F == j  = "System Warm Restart"
   | 0x01 == i  && 0x90 == j  = "D-pad Up"
   | 0x01 == i  && 0x91 == j  = "D-pad Down"
   | 0x01 == i  && 0x92 == j  = "D-pad Right"
   | 0x01 == i  && 0x93 == j  = "D-pad Left"
   | 0x01 == i  && 0x94 <= j && j <=0x9F = "Reserved"
   | 0x01 == i  && 0xA0 == j  = "System Dock"
   | 0x01 == i  && 0xA1 == j  = "System Undock"
   | 0x01 == i  && 0xA2 == j  = "System Setup"
   | 0x01 == i  && 0xA3 == j  = "System Break"
   | 0x01 == i  && 0xA4 == j  = "System Debugger Break"
   | 0x01 == i  && 0xA5 == j  = "Application Break"
   | 0x01 == i  && 0xA6 == j  = "Application Debugger Break"
   | 0x01 == i  && 0xA7 == j  = "System Speaker Mute"
   | 0x01 == i  && 0xA8 == j  = "System Hibernate"
   | 0x01 == i  && 0xA9 <= j && j <=0xAF = "Reserved"++(showihex i)++" "++(showihex j)++""
   | 0x01 == i  && 0xB0 == j  = "System Display Invert"
   | 0x01 == i  && 0xB1 == j  = "System Display Internal"
   | 0x01 == i  && 0xB2 == j  = "System Display External"
   | 0x01 == i  && 0xB3 == j  = "System Display Both"
   | 0x01 == i  && 0xB4 == j  = "System Display Dual"
   | 0x01 == i  && 0xB5 == j  = "System Display Toggle Int/Ext"
   | 0x01 == i  && 0xB6 == j  = "System Display Swap Primary/Secondary"
   | 0x01 == i  && 0xB7 == j  = "System Display LCD Autoscale"
   | 0x01 == i  && 0xB8 <= j && j <=0xBF = "Reserved"++(showihex i)++" "++(showihex j)++""
   | 0x01 == i  && 0xC0 == j  = "Sensor Zone"
   | 0x01 == i  && 0xC1 == j  = "RPM"
   | 0x01 == i  && 0xC2 == j  = "Coolant Level"
   | 0x01 == i  && 0xC3 == j  = "Coolant Critical Level"
   | 0x01 == i  && 0xC4 == j  = "Coolant Pump"
   | 0x01 == i  && 0xC5 == j  = "Chassis Enclosure"
   | 0x01 == i  && 0xC6 <= j && j <=0xFFFF = "Reserved"++(showihex i)++" "++(showihex j)++""
--  0002_sim.upg
   | 0x02 == i  && 0x00 == j  = "Undefined02"
   | 0x02 == i  && 0x01 == j  = "Flight Simulation Device"
   | 0x02 == i  && 0x02 == j  = "Automobile Simulation Device"
   | 0x02 == i  && 0x03 == j  = "Tank Simulation Device"
   | 0x02 == i  && 0x04 == j  = "Spaceship Simulation Device"
   | 0x02 == i  && 0x05 == j  = "Submarine Simulation Device"
   | 0x02 == i  && 0x06 == j  = "Sailing Simulation Device"
   | 0x02 == i  && 0x07 == j  = "Motorcycle Simulation Device"
   | 0x02 == i  && 0x08 == j  = "Sports Simulation Device"
   | 0x02 == i  && 0x09 == j  = "Airplane Simulation Device"
   | 0x02 == i  && 0x0A == j  = "Helicopter Simulation Device"
   | 0x02 == i  && 0x0B == j  = "Magic Carpet Simulation Device"
   | 0x02 == i  && 0x0C == j  = "Bicycle"
   | 0x02 == i  && 0x0D <= j && j <=0x1F = "Reserved02 "++(showihex j)++""
   | 0x02 == i  && 0x20 == j  = "Flight Control Stick"
   | 0x02 == i  && 0x21 == j  = "Flight Stick"
   | 0x02 == i  && 0x22 == j  = "Cyclic Control"
   | 0x02 == i  && 0x23 == j  = "Cyclic Trim"
   | 0x02 == i  && 0x24 == j  = "Flight Yoke"
   | 0x02 == i  && 0x25 == j  = "Track Control"
   | 0x02 == i  && 0x26 == j  = "Driving Control"
   | 0x02 == i  && 0x27 <= j && j <=0xAF = "Reserved02 "++(showihex j)++""
   | 0x02 == i  && 0xB0 == j  = "Aileron"
   | 0x02 == i  && 0xB1 == j  = "Aileron Trim"
   | 0x02 == i  && 0xB2 == j  = "Anti-Torque Control"
   | 0x02 == i  && 0xB3 == j  = "Auto-pilot enable"
   | 0x02 == i  && 0xB4 == j  = "Chaff Release"
   | 0x02 == i  && 0xB5 == j  = "Collective Control"
   | 0x02 == i  && 0xB6 == j  = "Dive Brake"
   | 0x02 == i  && 0xB7 == j  = "Electronic Counter Measures"
   | 0x02 == i  && 0xB8 == j  = "Elevator"
   | 0x02 == i  && 0xB9 == j  = "Elevator Trim"
   | 0x02 == i  && 0xBA == j  = "Rudder"
   | 0x02 == i  && 0xBB == j  = "Throttle"
   | 0x02 == i  && 0xBC == j  = "Flight Communication"
   | 0x02 == i  && 0xBD == j  = "Flare Release"
   | 0x02 == i  && 0xBE == j  = "Landing Gear"
   | 0x02 == i  && 0xBF == j  = "Toe Brake"
   | 0x02 == i  && 0xC0 == j  = "Trigger"
   | 0x02 == i  && 0xC1 == j  = "Weapons Arm"
   | 0x02 == i  && 0xC2 == j  = "Weapons Select"
   | 0x02 == i  && 0xC3 == j  = "Wing Flaps"
   | 0x02 == i  && 0xC4 == j  = "Accelerator"
   | 0x02 == i  && 0xC5 == j  = "Brake"
   | 0x02 == i  && 0xC6 == j  = "Clutch"
   | 0x02 == i  && 0xC7 == j  = "Shifter"
   | 0x02 == i  && 0xC8 == j  = "Steering"
   | 0x02 == i  && 0xC9 == j  = "Turret Direction"
   | 0x02 == i  && 0xCA == j  = "Barrel Elevation"
   | 0x02 == i  && 0xCB == j  = "Dive Plane"
   | 0x02 == i  && 0xCC == j  = "Ballast"
   | 0x02 == i  && 0xCD == j  = "Bicycle Crank"
   | 0x02 == i  && 0xCE == j  = "Handle Bars"
   | 0x02 == i  && 0xCF == j  = "Front Brake"
   | 0x02 == i  && 0xD0 == j  = "Rear Brake"
   | 0x02 == i  && 0xD1 <= j && j <=0xFFFF = "Reserved02 "++(showihex j)++""
--  0003_vr.upg
   | 0x03 == i  && 0x00 == j  = "Unidentified03"
   | 0x03 == i  && 0x01 == j  = "Belt"
   | 0x03 == i  && 0x02 == j  = "Body Suit"
   | 0x03 == i  && 0x03 == j  = "Flexor"
   | 0x03 == i  && 0x04 == j  = "Glove"
   | 0x03 == i  && 0x05 == j  = "Head Tracker"
   | 0x03 == i  && 0x06 == j  = "Head Mounted Display"
   | 0x03 == i  && 0x07 == j  = "Hand Tracker"
   | 0x03 == i  && 0x08 == j  = "Oculometer"
   | 0x03 == i  && 0x09 == j  = "Vest"
   | 0x03 == i  && 0x0A == j  = "Animatronic Device"
   | 0x03 == i  && 0x0B <= j && j <=0x1F = "Reserved03 "++(showihex j)++""
   | 0x03 == i  && 0x20 == j  = "Stereo Enable"
   | 0x03 == i  && 0x21 == j  = "Display Enable"
   | 0x03 == i  && 0x22 <= j && j <=0xFFFF = "Reserved03 "++(showihex j)++""
--  0004_sports.upg
   | 0x04 == i  && 0x00 == j  = "Unidentified"++(showihex i)++" "++(showihex j)++""
   | 0x04 == i  && 0x01 == j  = "Baseball Bat"
   | 0x04 == i  && 0x02 == j  = "Golf Club"
   | 0x04 == i  && 0x03 == j  = "Rowing Machine"
   | 0x04 == i  && 0x04 == j  = "Treadmill"
   | 0x04 == i  && 0x05 <= j && j <=0x2F = "Reserved"++(showihex i)++" "++(showihex j)++""
   | 0x04 == i  && 0x30 == j  = "Oar"
   | 0x04 == i  && 0x31 == j  = "Slope"
   | 0x04 == i  && 0x32 == j  = "Rate"
   | 0x04 == i  && 0x33 == j  = "Stick Speed"
   | 0x04 == i  && 0x34 == j  = "Stick Face Angle"
   | 0x04 == i  && 0x35 == j  = "Stick Heel/Toe"
   | 0x04 == i  && 0x36 == j  = "Stick Follow Through"
   | 0x04 == i  && 0x37 == j  = "Stick Tempo"
   | 0x04 == i  && 0x38 == j  = "Stick Type"
   | 0x04 == i  && 0x39 == j  = "Stick Height"
   | 0x04 == i  && 0x3A <= j && j <=0x4F = "Reserved"++(showihex i)++" "++(showihex j)++""
   | 0x04 == i  && 0x50 == j  = "Putter"
   | 0x04 == i  && 0x51 == j  = "1 Iron"
   | 0x04 == i  && 0x52 == j  = "2 Iron"
   | 0x04 == i  && 0x53 == j  = "3 Iron"
   | 0x04 == i  && 0x54 == j  = "4 Iron"
   | 0x04 == i  && 0x55 == j  = "5 Iron"
   | 0x04 == i  && 0x56 == j  = "6 Iron"
   | 0x04 == i  && 0x57 == j  = "7 Iron"
   | 0x04 == i  && 0x58 == j  = "8 Iron"
   | 0x04 == i  && 0x59 == j  = "9 Iron"
   | 0x04 == i  && 0x5A == j  = "10 Iron"
   | 0x04 == i  && 0x5B == j  = "11 Iron"
   | 0x04 == i  && 0x5C == j  = "Sand Wedge"
   | 0x04 == i  && 0x5D == j  = "Loft Wedge"
   | 0x04 == i  && 0x5E == j  = "Power Wedge"
   | 0x04 == i  && 0x5F == j  = "1 Wood"
   | 0x04 == i  && 0x60 == j  = "3 Wood"
   | 0x04 == i  && 0x61 == j  = "5 Wood"
   | 0x04 == i  && 0x62 == j  = "7 Wood"
   | 0x04 == i  && 0x63 == j  = "9 Wood"
   | 0x04 == i  && 0x64 <= j && j <=0xFFFF = "Reserved"++(showihex i)++" "++(showihex j)++""
--  0005_gaming.upg
   | 0x05 == i  && 0x00 == j  = "Undefined"++(showihex i)++" "++(showihex j)++""
   | 0x05 == i  && 0x01 == j  = "3D Game Controller"
   | 0x05 == i  && 0x02 == j  = "Pinball Device"
   | 0x05 == i  && 0x03 == j  = "Gun Device"
   | 0x05 == i  && 0x04 <= j && j <=0x1F = "Reserved"++(showihex i)++" "++(showihex j)++""
   | 0x05 == i  && 0x20 == j  = "Point of View"
   | 0x05 == i  && 0x21 == j  = "Turn Right/Left"
   | 0x05 == i  && 0x22 == j  = "Pitch Forward/Backward"
   | 0x05 == i  && 0x23 == j  = "Roll Right/Left"
   | 0x05 == i  && 0x24 == j  = "Move Right/Left"
   | 0x05 == i  && 0x25 == j  = "Move Forward/Backward"
   | 0x05 == i  && 0x26 == j  = "Move Up/Down"
   | 0x05 == i  && 0x27 == j  = "Lean Right/Left"
   | 0x05 == i  && 0x28 == j  = "Lean Forward/Backward"
   | 0x05 == i  && 0x29 == j  = "Height of POV"
   | 0x05 == i  && 0x2A == j  = "Flipper"
   | 0x05 == i  && 0x2B == j  = "Secondary Flipper"
   | 0x05 == i  && 0x2C == j  = "Bump"
   | 0x05 == i  && 0x2D == j  = "New Game"
   | 0x05 == i  && 0x2E == j  = "Shoot Ball"
   | 0x05 == i  && 0x2F == j  = "Player"
   | 0x05 == i  && 0x30 == j  = "Gun Bolt"
   | 0x05 == i  && 0x31 == j  = "Gun Clip"
   | 0x05 == i  && 0x32 == j  = "Gun Selector"
   | 0x05 == i  && 0x33 == j  = "Gun Single Shot"
   | 0x05 == i  && 0x34 == j  = "Gun Burst"
   | 0x05 == i  && 0x35 == j  = "Gun Automatic"
   | 0x05 == i  && 0x36 == j  = "Gun Safety"
   | 0x05 == i  && 0x37 == j  = "Gamepad Fire/Jump"
   | 0x05 == i  && 0x38 == j  = "XXXXXX"++(showihex i)++" "++(showihex j)++""
   | 0x05 == i  && 0x39 == j  = "Gamepad Trigger"
   | 0x05 == i  && 0x3A <= j && j <=0xFFFF = "Reserved"++(showihex i)++" "++(showihex j)++""
--  0006_generic.upg
   | 0x06 == i  && 0x00 == j  = "Unidentified"++(showihex i)++" "++(showihex j)++""
   | 0x06 == i  && 0x01 == j  = "Background Controls"
   | 0x06 == i  && 0x02 <= j && j <=0x1F = "Reserved"++(showihex i)++" "++(showihex j)++""
   | 0x06 == i  && 0x20 == j  = "Battery Strength"
   | 0x06 == i  && 0x21 == j  = "Wireless Channel"
   | 0x06 == i  && 0x22 == j  = "Wireless ID"
   | 0x06 == i  && 0x23 == j  = "Discover Wireless Control"
   | 0x06 == i  && 0x24 == j  = "Security Code Character Entered"
   | 0x06 == i  && 0x25 == j  = "Security Code Character Erased"
   | 0x06 == i  && 0x26 == j  = "Security Code Cleared"
   | 0x06 == i  && 0x27 == j  = "Sequence ID"
   | 0x06 == i  && 0x28 == j  = "Sequence ID Reset"
   | 0x06 == i  && 0x29 == j  = "RF Signal Strength"
   | 0x06 == i  && 0x2A <= j && j <=0xFFFF = "Reserved"++(showihex i)++" "++(showihex j)++""
--  0007_kbd.upg
   | 0x07 == i  && 0x00 == j  = "Reserved (no event indicated)9"
   | 0x07 == i  && 0x01 == j  = "Keyboard ErrorRollOver9"
   | 0x07 == i  && 0x02 == j  = "Keyboard POSTFail9"
   | 0x07 == i  && 0x03 == j  = "Keyboard ErrorUndefined9"
   | 0x07 == i  && 0x04 == j  = "Keyboard a and A4"
   | 0x07 == i  && 0x05 == j  = "Keyboard b and B"
   | 0x07 == i  && 0x06 == j  = "Keyboard c and C4"
   | 0x07 == i  && 0x07 == j  = "Keyboard d and D"
   | 0x07 == i  && 0x08 == j  = "Keyboard e and E"
   | 0x07 == i  && 0x09 == j  = "Keyboard f and F"
   | 0x07 == i  && 0x0A == j  = "Keyboard g and G"
   | 0x07 == i  && 0x0B == j  = "Keyboard h and H"
   | 0x07 == i  && 0x0C == j  = "Keyboard i and I"
   | 0x07 == i  && 0x0D == j  = "Keyboard j and J"
   | 0x07 == i  && 0x0E == j  = "Keyboard k and K"
   | 0x07 == i  && 0x0F == j  = "Keyboard l and L"
   | 0x07 == i  && 0x10 == j  = "Keyboard m and M4"
   | 0x07 == i  && 0x11 == j  = "Keyboard n and N"
   | 0x07 == i  && 0x12 == j  = "Keyboard o and O4"
   | 0x07 == i  && 0x13 == j  = "Keyboard p and P4"
   | 0x07 == i  && 0x14 == j  = "Keyboard q and Q4"
   | 0x07 == i  && 0x15 == j  = "Keyboard r and R"
   | 0x07 == i  && 0x16 == j  = "Keyboard s and S4"
   | 0x07 == i  && 0x17 == j  = "Keyboard t and T"
   | 0x07 == i  && 0x18 == j  = "Keyboard u and U"
   | 0x07 == i  && 0x19 == j  = "Keyboard v and V"
   | 0x07 == i  && 0x1A == j  = "Keyboard w and W4"
   | 0x07 == i  && 0x1B == j  = "Keyboard x and X4"
   | 0x07 == i  && 0x1C == j  = "Keyboard y and Y4"
   | 0x07 == i  && 0x1D == j  = "Keyboard z and Z4"
   | 0x07 == i  && 0x1E == j  = "Keyboard 1 and !4"
   | 0x07 == i  && 0x1F == j  = "Keyboard 2 and @4"
   | 0x07 == i  && 0x20 == j  = "Keyboard 3 and #4"
   | 0x07 == i  && 0x21 == j  = "Keyboard 4 and $4"
   | 0x07 == i  && 0x22 == j  = "Keyboard 5 and %4"
   | 0x07 == i  && 0x23 == j  = "Keyboard 6 and ^4"
   | 0x07 == i  && 0x24 == j  = "Keyboard 7 and &4"
   | 0x07 == i  && 0x25 == j  = "Keyboard 8 and *4"
   | 0x07 == i  && 0x26 == j  = "Keyboard 9 and (4"
   | 0x07 == i  && 0x27 == j  = "Keyboard 0 and )4"
   | 0x07 == i  && 0x28 == j  = "Keyboard Return (ENTER)5"
   | 0x07 == i  && 0x29 == j  = "Keyboard ESCAPE                  1"
   | 0x07 == i  && 0x2A == j  = "Keyboard DELETE (Backspace)13"
   | 0x07 == i  && 0x2B == j  = "Keyboard Tab"
   | 0x07 == i  && 0x2C == j  = "Keyboard Spacebar"
   | 0x07 == i  && 0x2D == j  = "Keyboard - and (underscore)4"
   | 0x07 == i  && 0x2E == j  = "Keyboard = and +4"
   | 0x07 == i  && 0x2F == j  = "Keyboard [ and {4"
   | 0x07 == i  && 0x30 == j  = "Keyboard ] and }4"
   | 0x07 == i  && 0x31 == j  = "Keyboard \\ and |"
   | 0x07 == i  && 0x32 == j  = "Keyboard Non-US # and ~2"
   | 0x07 == i  && 0x33 == j  = "Keyboard ; and :4"
   | 0x07 == i  && 0x34 == j  = "Keyboard ‘ and “4"
   | 0x07 == i  && 0x35 == j  = "Keyboard Grave Accent and Tilde4"
   | 0x07 == i  && 0x36 == j  = "Keyboard, and <4"
   | 0x07 == i  && 0x37 == j  = "Keyboard . and >4"
   | 0x07 == i  && 0x38 == j  = "Keyboard / and ?4"
   | 0x07 == i  && 0x39 == j  = "Keyboard Caps Lock11"
   | 0x07 == i  && 0x3A == j  = "Keyboard F1                      1"
   | 0x07 == i  && 0x3B == j  = "Keyboard F2"
   | 0x07 == i  && 0x3C == j  = "Keyboard F3"
   | 0x07 == i  && 0x3D == j  = "Keyboard F4"
   | 0x07 == i  && 0x3E == j  = "Keyboard F5"
   | 0x07 == i  && 0x3F == j  = "Keyboard F6"
   | 0x07 == i  && 0x40 == j  = "Keyboard F7"
   | 0x07 == i  && 0x41 == j  = "Keyboard F8"
   | 0x07 == i  && 0x42 == j  = "Keyboard F9"
   | 0x07 == i  && 0x43 == j  = "Keyboard F10"
   | 0x07 == i  && 0x44 == j  = "Keyboard F11"
   | 0x07 == i  && 0x45 == j  = "Keyboard F12"
   | 0x07 == i  && 0x46 == j  = "Keyboard PrintScreen1"
   | 0x07 == i  && 0x47 == j  = "Keyboard Scroll Lock11"
   | 0x07 == i  && 0x48 == j  = "Keyboard Pause1"
   | 0x07 == i  && 0x49 == j  = "Keyboard Insert1"
   | 0x07 == i  && 0x4A == j  = "Keyboard Home1"
   | 0x07 == i  && 0x4B == j  = "Keyboard PageUp1"
   | 0x07 == i  && 0x4C == j  = "Keyboard Delete Forward  1;14"
   | 0x07 == i  && 0x4D == j  = "Keyboard End1"
   | 0x07 == i  && 0x4E == j  = "Keyboard PageDown1"
   | 0x07 == i  && 0x4F == j  = "Keyboard RightArrow1"
   | 0x07 == i  && 0x50 == j  = "Keyboard LeftArrow1"
   | 0x07 == i  && 0x51 == j  = "Keyboard DownArrow1"
   | 0x07 == i  && 0x52 == j  = "Keyboard UpArrow1"
   | 0x07 == i  && 0x53 == j  = "Keypad Num Lock and Clear11"
   | 0x07 == i  && 0x54 == j  = "Keypad /   ;1"
   | 0x07 == i  && 0x55 == j  = "Keypad *"
   | 0x07 == i  && 0x56 == j  = "Keypad -"
   | 0x07 == i  && 0x57 == j  = "Keypad +"
   | 0x07 == i  && 0x58 == j  = "Keypad ENTER5"
   | 0x07 == i  && 0x59 == j  = "Keypad 1 and End"
   | 0x07 == i  && 0x5A == j  = "Keypad 2 and Down Arrow"
   | 0x07 == i  && 0x5B == j  = "Keypad 3 and PageDn"
   | 0x07 == i  && 0x5C == j  = "Keypad 4 and Left Arrow"
   | 0x07 == i  && 0x5D == j  = "Keypad 5"
   | 0x07 == i  && 0x5E == j  = "Keypad 6 and Right Arrow"
   | 0x07 == i  && 0x5F == j  = "Keypad 7 and Home"
   | 0x07 == i  && 0x60 == j  = "Keypad 8 and Up Arrow"
   | 0x07 == i  && 0x61 == j  = "Keypad 9 and PageUp"
   | 0x07 == i  && 0x62 == j  = "Keypad 0 and Insert"
   | 0x07 == i  && 0x63 == j  = "Keypad . and Delete"
   | 0x07 == i  && 0x64 == j  = "Keyboard Non-US \\ and | 3;6"
   | 0x07 == i  && 0x65 == j  = "Keyboard Application10"
   | 0x07 == i  && 0x66 == j  = "Keyboard Power9"
   | 0x07 == i  && 0x67 == j  = "Keypad ="
   | 0x07 == i  && 0x68 == j  = "Keyboard F13"
   | 0x07 == i  && 0x69 == j  = "Keyboard F14"
   | 0x07 == i  && 0x6A == j  = "Keyboard F15"
   | 0x07 == i  && 0x6B == j  = "Keyboard F16"
   | 0x07 == i  && 0x6C == j  = "Keyboard F17"
   | 0x07 == i  && 0x6D == j  = "Keyboard F18"
   | 0x07 == i  && 0x6E == j  = "Keyboard F19"
   | 0x07 == i  && 0x6F == j  = "Keyboard F20"
   | 0x07 == i  && 0x70 == j  = "Keyboard F21"
   | 0x07 == i  && 0x71 == j  = "Keyboard F22"
   | 0x07 == i  && 0x72 == j  = "Keyboard F23"
   | 0x07 == i  && 0x73 == j  = "Keyboard F24"
   | 0x07 == i  && 0x74 == j  = "Keyboard Execute"
   | 0x07 == i  && 0x75 == j  = "Keyboard Help"
   | 0x07 == i  && 0x76 == j  = "Keyboard Menu"
   | 0x07 == i  && 0x77 == j  = "Keyboard Select"
   | 0x07 == i  && 0x78 == j  = "Keyboard Stop"
   | 0x07 == i  && 0x79 == j  = "Keyboard Again"
   | 0x07 == i  && 0x7A == j  = "Keyboard Undo"
   | 0x07 == i  && 0x7B == j  = "Keyboard Cut"
   | 0x07 == i  && 0x7C == j  = "Keyboard Copy"
   | 0x07 == i  && 0x7D == j  = "Keyboard Paste"
   | 0x07 == i  && 0x7E == j  = "Keyboard Find"
   | 0x07 == i  && 0x7F == j  = "Keyboard Mute"
   | 0x07 == i  && 0x80 == j  = "Keyboard Volume Up"
   | 0x07 == i  && 0x81 == j  = "Keyboard Volume Down"
   | 0x07 == i  && 0x82 == j  = "Keyboard Locking Caps Lock12"
   | 0x07 == i  && 0x83 == j  = "Keyboard Locking Num Lock12"
   | 0x07 == i  && 0x84 == j  = "Keyboard Locking Scroll Lock12"
   | 0x07 == i  && 0x85 == j  = "Keypad Comma27"
   | 0x07 == i  && 0x86 == j  = "Keypad Equal Sign29"
   | 0x07 == i  && 0x87 == j  = "Keyboard International115,28"
   | 0x07 == i  && 0x88 == j  = "Keyboard International216"
   | 0x07 == i  && 0x89 == j  = "Keyboard International317"
   | 0x07 == i  && 0x8A == j  = "Keyboard International418"
   | 0x07 == i  && 0x8B == j  = "Keyboard International519"
   | 0x07 == i  && 0x8C == j  = "Keyboard International620"
   | 0x07 == i  && 0x8D == j  = "Keyboard International721"
   | 0x07 == i  && 0x8E == j  = "Keyboard International822"
   | 0x07 == i  && 0x8F == j  = "Keyboard International922"
   | 0x07 == i  && 0x90 == j  = "Keyboard LANG125"
   | 0x07 == i  && 0x91 == j  = "Keyboard LANG226"
   | 0x07 == i  && 0x92 == j  = "Keyboard LANG330"
   | 0x07 == i  && 0x93 == j  = "Keyboard LANG431"
   | 0x07 == i  && 0x94 == j  = "Keyboard LANG532"
   | 0x07 == i  && 0x95 == j  = "Keyboard LANG68"
   | 0x07 == i  && 0x96 == j  = "Keyboard LANG78"
   | 0x07 == i  && 0x97 == j  = "Keyboard LANG88"
   | 0x07 == i  && 0x98 == j  = "Keyboard LANG98"
   | 0x07 == i  && 0x99 == j  = "Keyboard Alternate Erase7"
   | 0x07 == i  && 0x9A == j  = "Keyboard SysReq/Attention1"
   | 0x07 == i  && 0x9B == j  = "Keyboard Cancel"
   | 0x07 == i  && 0x9C == j  = "Keyboard Clear"
   | 0x07 == i  && 0x9D == j  = "Keyboard Prior"
   | 0x07 == i  && 0x9E == j  = "Keyboard Return"
   | 0x07 == i  && 0x9F == j  = "Keyboard Separator"
   | 0x07 == i  && 0xA0 == j  = "Keyboard Out"
   | 0x07 == i  && 0xA1 == j  = "Keyboard Oper"
   | 0x07 == i  && 0xA2 == j  = "Keyboard Clear/Again"
   | 0x07 == i  && 0xA3 == j  = "Keyboard CrSel/Props"
   | 0x07 == i  && 0xA4 == j  = "Keyboard ExSel"
   | 0x07 == i  && 0xA5 <= j && j <=0xAF = "Reserved"++(showihex i)++" "++(showihex j)++""
   | 0x07 == i  && 0xB0 == j  = "Keypad 00"
   | 0x07 == i  && 0xB1 == j  = "Keypad 000"
   | 0x07 == i  && 0xB2 == j  = "Thousands Separator 33"
   | 0x07 == i  && 0xB3 == j  = "Decimal Separator 33"
   | 0x07 == i  && 0xB4 == j  = "Currency Unit 34"
   | 0x07 == i  && 0xB5 == j  = "Currency Sub-unit 34"
   | 0x07 == i  && 0xB6 == j  = "Keypad ("
   | 0x07 == i  && 0xB7 == j  = "Keypad )"
   | 0x07 == i  && 0xB8 == j  = "Keypad {"
   | 0x07 == i  && 0xB9 == j  = "Keypad }"
   | 0x07 == i  && 0xBA == j  = "Keypad Tab"
   | 0x07 == i  && 0xBB == j  = "Keypad Backspace"
   | 0x07 == i  && 0xBC == j  = "Keypad A"
   | 0x07 == i  && 0xBD == j  = "Keypad B"
   | 0x07 == i  && 0xBE == j  = "Keypad C"
   | 0x07 == i  && 0xBF == j  = "Keypad D"
   | 0x07 == i  && 0xC0 == j  = "Keypad E"
   | 0x07 == i  && 0xC1 == j  = "Keypad F"
   | 0x07 == i  && 0xC2 == j  = "Keypad XOR"
   | 0x07 == i  && 0xC3 == j  = "Keypad ^"
   | 0x07 == i  && 0xC4 == j  = "Keypad %"
   | 0x07 == i  && 0xC5 == j  = "Keypad <"
   | 0x07 == i  && 0xC6 == j  = "Keypad >"
   | 0x07 == i  && 0xC7 == j  = "Keypad &"
   | 0x07 == i  && 0xC8 == j  = "Keypad &&"
   | 0x07 == i  && 0xC9 == j  = "Keypad |"
   | 0x07 == i  && 0xCA == j  = "Keypad ||"
   | 0x07 == i  && 0xCB == j  = "Keypad :"
   | 0x07 == i  && 0xCC == j  = "Keypad #"
   | 0x07 == i  && 0xCD == j  = "Keypad Space"
   | 0x07 == i  && 0xCE == j  = "Keypad @"
   | 0x07 == i  && 0xCF == j  = "Keypad !"
   | 0x07 == i  && 0xD0 == j  = "Keypad Memory Store"
   | 0x07 == i  && 0xD1 == j  = "Keypad Memory Recall"
   | 0x07 == i  && 0xD2 == j  = "Keypad Memory Clear"
   | 0x07 == i  && 0xD3 == j  = "Keypad Memory Add"
   | 0x07 == i  && 0xD4 == j  = "Keypad Memory Subtract"
   | 0x07 == i  && 0xD5 == j  = "Keypad Memory Multiply"
   | 0x07 == i  && 0xD6 == j  = "Keypad Memory Divide"
   | 0x07 == i  && 0xD7 == j  = "Keypad +/-"
   | 0x07 == i  && 0xD8 == j  = "Keypad Clear"
   | 0x07 == i  && 0xD9 == j  = "Keypad Clear Entry"
   | 0x07 == i  && 0xDA == j  = "Keypad Binary"
   | 0x07 == i  && 0xDB == j  = "Keypad Octal"
   | 0x07 == i  && 0xDC == j  = "Keypad Decimal"
   | 0x07 == i  && 0xDD == j  = "Keypad Hexadecimal"
   | 0x07 == i  && 0xDE <= j && j <=0xDF = "Reserved"++(showihex i)++" "++(showihex j)++""
   | 0x07 == i  && 0xE0 == j  = "Keyboard LeftControl"
   | 0x07 == i  && 0xE1 == j  = "Keyboard LeftShift"
   | 0x07 == i  && 0xE2 == j  = "Keyboard LeftAlt"
   | 0x07 == i  && 0xE3 == j  = "Keyboard Left GUI10;23"
   | 0x07 == i  && 0xE4 == j  = "Keyboard RightControl"
   | 0x07 == i  && 0xE5 == j  = "Keyboard RightShift"
   | 0x07 == i  && 0xE6 == j  = "Keyboard RightAlt"
   | 0x07 == i  && 0xE7 == j  = "Keyboard Right GUI10;24"
   | 0x07 == i  && 0xE8 <= j && j <=0xFFFF = "Reserved"++(showihex i)++" "++(showihex j)++""
--  0008_leds.upg
   | 0x08 == i  && 0x00 == j  = "Undefined"++(showihex i)++" "++(showihex j)++""
   | 0x08 == i  && 0x01 == j  = "Num Lock"
   | 0x08 == i  && 0x02 == j  = "Caps Lock"
   | 0x08 == i  && 0x03 == j  = "Scroll Lock"
   | 0x08 == i  && 0x04 == j  = "Compose"
   | 0x08 == i  && 0x05 == j  = "Kana"
   | 0x08 == i  && 0x06 == j  = "Power"
   | 0x08 == i  && 0x07 == j  = "Shift"
   | 0x08 == i  && 0x08 == j  = "Do Not Disturb"
   | 0x08 == i  && 0x09 == j  = "Mute"
   | 0x08 == i  && 0x0A == j  = "Tone Enable"
   | 0x08 == i  && 0x0B == j  = "High Cut Filter"
   | 0x08 == i  && 0x0C == j  = "Low Cut Filter"
   | 0x08 == i  && 0x0D == j  = "Equalizer Enable"
   | 0x08 == i  && 0x0E == j  = "Sound Field On"
   | 0x08 == i  && 0x0F == j  = "Surround On"
   | 0x08 == i  && 0x10 == j  = "Repeat"
   | 0x08 == i  && 0x11 == j  = "Stereo"
   | 0x08 == i  && 0x12 == j  = "Sampling Rate Detect"
   | 0x08 == i  && 0x13 == j  = "Spinning"
   | 0x08 == i  && 0x14 == j  = "CAV"
   | 0x08 == i  && 0x15 == j  = "CLV"
   | 0x08 == i  && 0x16 == j  = "Recording Format Detect"
   | 0x08 == i  && 0x17 == j  = "Off-Hook"
   | 0x08 == i  && 0x18 == j  = "Ring"
   | 0x08 == i  && 0x19 == j  = "Message Waiting"
   | 0x08 == i  && 0x1A == j  = "Data Mode"
   | 0x08 == i  && 0x1B == j  = "Battery Operation"
   | 0x08 == i  && 0x1C == j  = "Battery OK"
   | 0x08 == i  && 0x1D == j  = "Battery Low"
   | 0x08 == i  && 0x1E == j  = "Speaker"
   | 0x08 == i  && 0x1F == j  = "Head Set"
   | 0x08 == i  && 0x20 == j  = "Hold"
   | 0x08 == i  && 0x21 == j  = "Microphone"
   | 0x08 == i  && 0x22 == j  = "Coverage"
   | 0x08 == i  && 0x23 == j  = "Night Mode"
   | 0x08 == i  && 0x24 == j  = "Send Calls"
   | 0x08 == i  && 0x25 == j  = "Call Pickup"
   | 0x08 == i  && 0x26 == j  = "Conference"
   | 0x08 == i  && 0x27 == j  = "Stand-by"
   | 0x08 == i  && 0x28 == j  = "Camera On"
   | 0x08 == i  && 0x29 == j  = "Camera Off"
   | 0x08 == i  && 0x2A == j  = "On-Line"
   | 0x08 == i  && 0x2B == j  = "Off-Line"
   | 0x08 == i  && 0x2C == j  = "Busy"
   | 0x08 == i  && 0x2D == j  = "Ready"
   | 0x08 == i  && 0x2E == j  = "Paper-Out"
   | 0x08 == i  && 0x2F == j  = "Paper-Jam"
   | 0x08 == i  && 0x30 == j  = "Remote"
   | 0x08 == i  && 0x31 == j  = "Forward"
   | 0x08 == i  && 0x32 == j  = "Reverse"
   | 0x08 == i  && 0x33 == j  = "Stop"
   | 0x08 == i  && 0x34 == j  = "Rewind"
   | 0x08 == i  && 0x35 == j  = "Fast Forward"
   | 0x08 == i  && 0x36 == j  = "Play"
   | 0x08 == i  && 0x37 == j  = "Pause"
   | 0x08 == i  && 0x38 == j  = "Record"
   | 0x08 == i  && 0x39 == j  = "Error"
   | 0x08 == i  && 0x3A == j  = "Usage Selected Indicator"
   | 0x08 == i  && 0x3B == j  = "Usage In Use Indicator"
   | 0x08 == i  && 0x3C == j  = "Usage Multi Mode Indicator"
   | 0x08 == i  && 0x3D == j  = "Indicator On"
   | 0x08 == i  && 0x3E == j  = "Indicator Flash"
   | 0x08 == i  && 0x3F == j  = "Indicator Slow Blink"
   | 0x08 == i  && 0x40 == j  = "Indicator Fast Blink"
   | 0x08 == i  && 0x41 == j  = "Indicator Off"
   | 0x08 == i  && 0x42 == j  = "Flash On Time"
   | 0x08 == i  && 0x43 == j  = "Slow Blink On Time"
   | 0x08 == i  && 0x44 == j  = "Slow Blink Off Time"
   | 0x08 == i  && 0x45 == j  = "Fast Blink On Time"
   | 0x08 == i  && 0x46 == j  = "Fast Blink Off Time"
   | 0x08 == i  && 0x47 == j  = "Usage Indicator Color"
   | 0x08 == i  && 0x48 == j  = "Indicator Red"
   | 0x08 == i  && 0x49 == j  = "Indicator Green"
   | 0x08 == i  && 0x4A == j  = "Indicator Amber"
   | 0x08 == i  && 0x4B == j  = "Generic Indicator"
   | 0x08 == i  && 0x4C == j  = "System Suspend"
   | 0x08 == i  && 0x4D == j  = "External Power Connected"
   | 0x08 == i  && 0x4E == j  = "Indicator Blue"
   | 0x08 == i  && 0x4F == j  = "Indicator Orange"
   | 0x08 == i  && 0x50 == j  = "Good Status"
   | 0x08 == i  && 0x51 == j  = "Warning Status"
   | 0x08 == i  && 0x52 == j  = "RGB LED"
   | 0x08 == i  && 0x53 == j  = "Red LED Channel"
   | 0x08 == i  && 0x54 == j  = "Greed LED Channel"
   | 0x08 == i  && 0x55 == j  = "Blue LED Channel"
   | 0x08 == i  && 0x56 == j  = "LED Intensity"
   | 0x08 == i  && 0x57 <= j && j <=0xFFFF = "Reserved"++(showihex i)++" "++(showihex j)++""
--  0009_button.upg
   | 0x09 == i  && 0x00 == j  = "No button pressed"
   | 0x09 == i  && 0x01 == j  = "Button 1 (primary/trigger)"
   | 0x09 == i  && 0x02 == j  = "Button 2 (secondary)"
   | 0x09 == i  && 0x03 == j  = "Button 3 (tertiary)"
   | 0x09 == i  && 0x04 <= j && j <=0xFFFF = "Button "++(showihex j)++""
--  000A_ordinal.upg
   | 0x0A == i  && 0x00 == j  = "Reserved"++(showihex i)++""
   | 0x0A == i  && 0x01 <= j && j <=0xFFFF = "Instance "++(showihex j)++""
--  000B_tele.upg
   | 0x0B == i  && 0x00 == j  = "Unassigned"++(showihex i)++" "++(showihex j)++""
   | 0x0B == i  && 0x01 == j  = "Phone"
   | 0x0B == i  && 0x02 == j  = "Answering Machine"
   | 0x0B == i  && 0x03 == j  = "Message Controls"
   | 0x0B == i  && 0x04 == j  = "Handset"
   | 0x0B == i  && 0x05 == j  = "Headset"
   | 0x0B == i  && 0x06 == j  = "Telephony Key Pad"
   | 0x0B == i  && 0x07 == j  = "Programmable Button"
   | 0x0B == i  && 0x08 <= j && j <=0x1F = "Reserved"++(showihex i)++" "++(showihex j)++""
   | 0x0B == i  && 0x20 == j  = "Hook Switch"
   | 0x0B == i  && 0x21 == j  = "Flash"
   | 0x0B == i  && 0x22 == j  = "Feature"
   | 0x0B == i  && 0x23 == j  = "Hold"
   | 0x0B == i  && 0x24 == j  = "Redial"
   | 0x0B == i  && 0x25 == j  = "Transfer"
   | 0x0B == i  && 0x26 == j  = "Drop"
   | 0x0B == i  && 0x27 == j  = "Park"
   | 0x0B == i  && 0x28 == j  = "Forward Calls"
   | 0x0B == i  && 0x29 == j  = "Alternate Function"
   | 0x0B == i  && 0x2A == j  = "Line"
   | 0x0B == i  && 0x2B == j  = "Speaker Phone"
   | 0x0B == i  && 0x2C == j  = "Conference"
   | 0x0B == i  && 0x2D == j  = "Ring Enable"
   | 0x0B == i  && 0x2E == j  = "Ring Select"
   | 0x0B == i  && 0x2F == j  = "Phone Mute"
   | 0x0B == i  && 0x30 == j  = "Caller ID"
   | 0x0B == i  && 0x31 == j  = "Send"
   | 0x0B == i  && 0x32 <= j && j <=0x4F = "Reserved"++(showihex i)++" "++(showihex j)++""
   | 0x0B == i  && 0x50 == j  = "Speed Dial"
   | 0x0B == i  && 0x51 == j  = "Store Number"
   | 0x0B == i  && 0x52 == j  = "Recall Number"
   | 0x0B == i  && 0x53 == j  = "Phone Directory"
   | 0x0B == i  && 0x54 <= j && j <=0x6F = "Reserved"++(showihex i)++" "++(showihex j)++""
   | 0x0B == i  && 0x70 == j  = "Voice Mail"
   | 0x0B == i  && 0x71 == j  = "Screen Calls"
   | 0x0B == i  && 0x72 == j  = "Do Not Disturb"
   | 0x0B == i  && 0x73 == j  = "Message"
   | 0x0B == i  && 0x74 == j  = "Answer On/Off"
   | 0x0B == i  && 0x75 <= j && j <=0x8F = "Reserved"++(showihex i)++" "++(showihex j)++""
   | 0x0B == i  && 0x90 == j  = "Inside Dial Tone"
   | 0x0B == i  && 0x91 == j  = "Outside Dial Tone"
   | 0x0B == i  && 0x92 == j  = "Inside Ring Tone"
   | 0x0B == i  && 0x93 == j  = "Outside Ring Tone"
   | 0x0B == i  && 0x94 == j  = "Priority Ring Tone"
   | 0x0B == i  && 0x95 == j  = "Inside Ringback"
   | 0x0B == i  && 0x96 == j  = "Priority Ringback"
   | 0x0B == i  && 0x97 == j  = "Line Busy Tone"
   | 0x0B == i  && 0x98 == j  = "Reorder Tone"
   | 0x0B == i  && 0x99 == j  = "Call Waiting Tone"
   | 0x0B == i  && 0x9A == j  = "Confirmation Tone 1"
   | 0x0B == i  && 0x9B == j  = "Confirmation Tone 2"
   | 0x0B == i  && 0x9C == j  = "Tones Off"
   | 0x0B == i  && 0x9D == j  = "Outside Ringback"
   | 0x0B == i  && 0x9E == j  = "Ringer"
   | 0x0B == i  && 0x9E <= j && j <=0xAF = "Reserved"++(showihex i)++" "++(showihex j)++""
   | 0x0B == i  && 0xB0 == j  = "Phone Key 0"
   | 0x0B == i  && 0xB1 == j  = "Phone Key 1"
   | 0x0B == i  && 0xB2 == j  = "Phone Key 2"
   | 0x0B == i  && 0xB3 == j  = "Phone Key 3"
   | 0x0B == i  && 0xB4 == j  = "Phone Key 4"
   | 0x0B == i  && 0xB5 == j  = "Phone Key 5"
   | 0x0B == i  && 0xB6 == j  = "Phone Key 6"
   | 0x0B == i  && 0xB7 == j  = "Phone Key 7"
   | 0x0B == i  && 0xB8 == j  = "Phone Key 8"
   | 0x0B == i  && 0xB9 == j  = "Phone Key 9"
   | 0x0B == i  && 0xBA == j  = "Phone Key Star"
   | 0x0B == i  && 0xBB == j  = "Phone Key Pound"
   | 0x0B == i  && 0xBC == j  = "Phone Key A"
   | 0x0B == i  && 0xBD == j  = "Phone Key B"
   | 0x0B == i  && 0xBE == j  = "Phone Key C"
   | 0x0B == i  && 0xBF == j  = "Phone Key D"
   | 0x0B == i  && 0xC0 == j  = "Phone Call History Key"
   | 0x0B == i  && 0xC1 == j  = "Phone Caller ID Key"
   | 0x0B == i  && 0xC2 == j  = "Phone Settings Key"
   | 0x0B == i  && 0xC3 <= j && j <=0xDF = "Reserved "++(showihex i)++" "++(showihex j)++""
   | 0x0B == i  && 0xF0 == j  = "Host Control"
   | 0x0B == i  && 0xF1 == j  = "Host Available"
   | 0x0B == i  && 0xF2 == j  = "Host Call Active"
   | 0x0B == i  && 0xF3 == j  = "Activate Handset Audio"
   | 0x0B == i  && 0xF4 == j  = "Ring Type"
   | 0x0B == i  && 0xF5 == j  = "Re-dialable Phone Number"
   | 0x0B == i  && 0xF6 <= j && j <=0xF7 = "Reserved "++(showihex i)++" "++(showihex j)++""
   | 0x0B == i  && 0xF8 == j  = "Stop Ring Tone"
   | 0x0B == i  && 0xF9 == j  = "PSTN Ring Tone"
   | 0x0B == i  && 0xFA == j  = "Host Ring Tone"
   | 0x0B == i  && 0xFB == j  = "Alert Sound Error"
   | 0x0B == i  && 0xFC == j  = "Alert Sound Confirm"
   | 0x0B == i  && 0xFD == j  = "Alert Sound Notification"
   | 0x0B == i  && 0xFE == j  = "Silent Ring"
   | 0x0B == i  && 0xFF <= j && j <=0x107 = "Reserved "++(showihex i)++" "++(showihex j)++""
   | 0x0B == i  && 0x108 == j  = "Email Message Waiting"
   | 0x0B == i  && 0x109 == j  = "Voicemail Message Waiting"
   | 0x0B == i  && 0x10A == j  = "Host Hold"
   | 0x0B == i  && 0x109 <= j && j <=0x10F = "Reserved "++(showihex i)++" "++(showihex j)++""
   | 0x0B == i  && 0x110 == j  = "Incoming Call History Count"
   | 0x0B == i  && 0x111 == j  = "Outgoing Call History Count"
   | 0x0B == i  && 0x112 == j  = "Incoming Call History"
   | 0x0B == i  && 0x113 == j  = "Outgoing Call History"
   | 0x0B == i  && 0x114 == j  = "Phone Locale"
   | 0x0B == i  && 0x115 <= j && j <=0x13F = "Reserved "++(showihex i)++" "++(showihex j)++""
   | 0x0B == i  && 0x140 == j  = "Phone Time Second"
   | 0x0B == i  && 0x141 == j  = "Phone Time Minute"
   | 0x0B == i  && 0x142 == j  = "Phone Time Hour"
   | 0x0B == i  && 0x143 == j  = "Phone Date Day"
   | 0x0B == i  && 0x144 == j  = "Phone Date Month"
   | 0x0B == i  && 0x145 == j  = "Phone Date Year"
   | 0x0B == i  && 0x146 == j  = "Handset Nickname"
   | 0x0B == i  && 0x147 == j  = "Address Book ID"
   | 0x0B == i  && 0x14A == j  = "Call Duration"
   | 0x0B == i  && 0x14B == j  = "Dual Mode Phone"
   | 0x0B == i  && 0x14C <= j && j <=0xFFFF = "Reserved "++(showihex i)++" "++(showihex j)++""
--  000C_consume.upg
   | 0x0C == i  && 0x00 == j  = "Unassigned"++(showihex i)++""
   | 0x0C == i  && 0x01 == j  = "Consumer Control"
   | 0x0C == i  && 0x02 == j  = "Numeric Key Pad"
   | 0x0C == i  && 0x04 <= j && j <=0x1F = "Reserved"++(showihex i)++" "++(showihex j)++""
   | 0x0C == i  && 0x20 == j  = "+10"
   | 0x0C == i  && 0x21 == j  = "+100"
   | 0x0C == i  && 0x22 == j  = "AM/PM"
   | 0x0C == i  && 0x23 <= j && j <=0x2F = "Reserved"++(showihex i)++" "++(showihex j)++""
   | 0x0C == i  && 0x30 == j  = "Power"
   | 0x0C == i  && 0x31 == j  = "Reset"
   | 0x0C == i  && 0x32 == j  = "Sleep"
   | 0x0C == i  && 0x33 == j  = "Sleep After"
   | 0x0C == i  && 0x34 == j  = "Sleep Mode"
   | 0x0C == i  && 0x35 == j  = "Illumination"
   | 0x0C == i  && 0x36 == j  = "Function Buttons"
   | 0x0C == i  && 0x37 <= j && j <=0x3F = "Reserved"++(showihex i)++" "++(showihex j)++""
   | 0x0C == i  && 0x40 == j  = "Menu"
   | 0x0C == i  && 0x41 == j  = "Menu  Pick"
   | 0x0C == i  && 0x42 == j  = "Menu Up"
   | 0x0C == i  && 0x43 == j  = "Menu Down"
   | 0x0C == i  && 0x44 == j  = "Menu Left"
   | 0x0C == i  && 0x45 == j  = "Menu Right"
   | 0x0C == i  && 0x46 == j  = "Menu Escape"
   | 0x0C == i  && 0x47 == j  = "Menu Value Increase"
   | 0x0C == i  && 0x48 == j  = "Menu Value Decrease"
   | 0x0C == i  && 0x49 <= j && j <=0x5F = "Reserved"++(showihex i)++" "++(showihex j)++""
   | 0x0C == i  && 0x60 == j  = "Data On Screen"
   | 0x0C == i  && 0x61 == j  = "Closed Caption"
   | 0x0C == i  && 0x62 == j  = "Closed Caption Select"
   | 0x0C == i  && 0x63 == j  = "VCR/TV"
   | 0x0C == i  && 0x64 == j  = "Broadcast Mode"
   | 0x0C == i  && 0x65 == j  = "Snapshot"
   | 0x0C == i  && 0x66 == j  = "Still"
   | 0x0C == i  && 0x67 == j  = "Picture-in-Picture Toggle"
   | 0x0C == i  && 0x68 == j  = "Picture-in-Picture Swap"
   | 0x0C == i  && 0x69 == j  = "Red Menu Button"
   | 0x0C == i  && 0x6A == j  = "Green Menu Button"
   | 0x0C == i  && 0x6B == j  = "Blue Menu Button"
   | 0x0C == i  && 0x6C == j  = "Yellow Menu Button"
   | 0x0C == i  && 0x6D == j  = "Reserved"++(showihex i)++" "++(showihex j)++""
   | 0x0C == i  && 0x6E == j  = "3D Mode Select"
   | 0x0C == i  && 0x6F <= j && j <=0x7F = "Reserved"++(showihex i)++" "++(showihex j)++""
   | 0x0C == i  && 0x80 == j  = "Selection"
   | 0x0C == i  && 0x81 == j  = "Assign Selection"
   | 0x0C == i  && 0x82 == j  = "Mode Step"
   | 0x0C == i  && 0x83 == j  = "Recall Last"
   | 0x0C == i  && 0x84 == j  = "Enter Channel"
   | 0x0C == i  && 0x85 == j  = "Order Movie"
   | 0x0C == i  && 0x86 == j  = "Channel"
   | 0x0C == i  && 0x87 == j  = "Media Selection"
   | 0x0C == i  && 0x88 == j  = "Media Select Computer"
   | 0x0C == i  && 0x89 == j  = "Media Select TV"
   | 0x0C == i  && 0x8A == j  = "Media Select WWW"
   | 0x0C == i  && 0x8B == j  = "Media Select DVD"
   | 0x0C == i  && 0x8C == j  = "Media Select Telephone"
   | 0x0C == i  && 0x8D == j  = "Media Select Program Guide"
   | 0x0C == i  && 0x8E == j  = "Media Select Video Phone"
   | 0x0C == i  && 0x8F == j  = "Media Select Games"
   | 0x0C == i  && 0x90 == j  = "Media Select Messages"
   | 0x0C == i  && 0x91 == j  = "Media Select CD"
   | 0x0C == i  && 0x92 == j  = "Media Select VCR"
   | 0x0C == i  && 0x93 == j  = "Media Select Tuner"
   | 0x0C == i  && 0x94 == j  = "Quit"
   | 0x0C == i  && 0x95 == j  = "Help"
   | 0x0C == i  && 0x96 == j  = "Media Select Tape"
   | 0x0C == i  && 0x97 == j  = "Media Select Cable"
   | 0x0C == i  && 0x98 == j  = "Media Select Satellite"
   | 0x0C == i  && 0x99 == j  = "Media Select Security"
   | 0x0C == i  && 0x9A == j  = "Media Select Home"
   | 0x0C == i  && 0x9B == j  = "Media Select Call"
   | 0x0C == i  && 0x9C == j  = "Channel Increment"
   | 0x0C == i  && 0x9D == j  = "Channel Decrement"
   | 0x0C == i  && 0x9E <= j && j <=0x9F = "Reserved"++(showihex i)++" "++(showihex j)++""
   | 0x0C == i  && 0xA0 == j  = "VCR Plus"
   | 0x0C == i  && 0xA1 == j  = "Once"
   | 0x0C == i  && 0xA2 == j  = "Daily"
   | 0x0C == i  && 0xA3 == j  = "Weekly"
   | 0x0C == i  && 0xA4 == j  = "Monthly"
   | 0x0C == i  && 0xA5 <= j && j <=0xAF = "Reserved"++(showihex i)++" "++(showihex j)++""
   | 0x0C == i  && 0xB0 == j  = "Play"
   | 0x0C == i  && 0xB1 == j  = "Pause"
   | 0x0C == i  && 0xB2 == j  = "Record"
   | 0x0C == i  && 0xB3 == j  = "Fast Forward"
   | 0x0C == i  && 0xB4 == j  = "Rewind"
   | 0x0C == i  && 0xB5 == j  = "Scan Next Track"
   | 0x0C == i  && 0xB6 == j  = "Scan Previous Track"
   | 0x0C == i  && 0xB7 == j  = "Stop"
   | 0x0C == i  && 0xB8 == j  = "Eject"
   | 0x0C == i  && 0xB9 == j  = "Random Play"
   | 0x0C == i  && 0xBA == j  = "Select Disc"
   | 0x0C == i  && 0xBB == j  = "Enter Disc"
   | 0x0C == i  && 0xBC == j  = "Repeat"
   | 0x0C == i  && 0xBD == j  = "Tracking"
   | 0x0C == i  && 0xBE == j  = "Track Normal"
   | 0x0C == i  && 0xBF == j  = "Slow Tracking"
   | 0x0C == i  && 0xC0 == j  = "Frame Forward"
   | 0x0C == i  && 0xC1 == j  = "Frame Back"
   | 0x0C == i  && 0xC2 == j  = "Mark"
   | 0x0C == i  && 0xC3 == j  = "Clear Mark"
   | 0x0C == i  && 0xC4 == j  = "Repeat From Mark"
   | 0x0C == i  && 0xC5 == j  = "Return To Mark"
   | 0x0C == i  && 0xC6 == j  = "Search Mark Forward"
   | 0x0C == i  && 0xC7 == j  = "Search Mark Backwards"
   | 0x0C == i  && 0xC8 == j  = "Counter Reset"
   | 0x0C == i  && 0xC9 == j  = "Show Counter"
   | 0x0C == i  && 0xCA == j  = "Tracking Increment"
   | 0x0C == i  && 0xCB == j  = "Tracking Decrement"
   | 0x0C == i  && 0xCC <= j && j <=0xDF = "Reserved"++(showihex i)++" "++(showihex j)++""
   | 0x0C == i  && 0xE0 == j  = "Volume"
   | 0x0C == i  && 0xE1 == j  = "Balance"
   | 0x0C == i  && 0xE2 == j  = "Mute"
   | 0x0C == i  && 0xE3 == j  = "Bass"
   | 0x0C == i  && 0xE4 == j  = "Treble"
   | 0x0C == i  && 0xE5 == j  = "Bass Boost"
   | 0x0C == i  && 0xE6 == j  = "Surround Mode"
   | 0x0C == i  && 0xE7 == j  = "Loudness"
   | 0x0C == i  && 0xE8 == j  = "MPX"
   | 0x0C == i  && 0xE9 == j  = "Volume Up"
   | 0x0C == i  && 0xEA == j  = "Volume Down"
   | 0x0C == i  && 0xEB <= j && j <=0xEF = "Reserved"++(showihex i)++" "++(showihex j)++""
   | 0x0C == i  && 0xF0 == j  = "Speed Select"
   | 0x0C == i  && 0xF1 == j  = "Playback Speed"
   | 0x0C == i  && 0xF2 == j  = "Standard Play"
   | 0x0C == i  && 0xF3 == j  = "Long Play"
   | 0x0C == i  && 0xF4 == j  = "Extended Play"
   | 0x0C == i  && 0xF5 == j  = "Slow"
   | 0x0C == i  && 0xF6 <= j && j <=0xFF = "Reserved"++(showihex i)++" "++(showihex j)++""
   | 0x0C == i  && 0x100 == j  = "Fan Enable"
   | 0x0C == i  && 0x101 == j  = "Fan Speed"
   | 0x0C == i  && 0x102 == j  = "Light"
   | 0x0C == i  && 0x103 == j  = "Light Illumination Level"
   | 0x0C == i  && 0x104 == j  = "Climate Control Enable"
   | 0x0C == i  && 0x105 == j  = "Room Temperature"
   | 0x0C == i  && 0x106 == j  = "Security Enable"
   | 0x0C == i  && 0x107 == j  = "Fire Alarm"
   | 0x0C == i  && 0x108 == j  = "Police Alarm"
   | 0x0C == i  && 0x109 == j  = "Proximity"
   | 0x0C == i  && 0x10A == j  = "Motion"
   | 0x0C == i  && 0x10B == j  = "Duress Alarm"
   | 0x0C == i  && 0x10C == j  = "Holdup Alarm"
   | 0x0C == i  && 0x10D == j  = "Medical Alarm"
   | 0x0C == i  && 0x10E <= j && j <=0x14F = "Reserved"
   | 0x0C == i  && 0x150 == j  = "Balance Right"
   | 0x0C == i  && 0x151 == j  = "Balance Left"
   | 0x0C == i  && 0x152 == j  = "Bass Increment"
   | 0x0C == i  && 0x153 == j  = "Bass Decrement"
   | 0x0C == i  && 0x154 == j  = "Treble Increment"
   | 0x0C == i  && 0x155 == j  = "Treble Decrement"
   | 0x0C == i  && 0x156 <= j && j <=0x15F = "Reserved"
   | 0x0C == i  && 0x160 == j  = "Speaker System"
   | 0x0C == i  && 0x161 == j  = "Channel Left"
   | 0x0C == i  && 0x162 == j  = "Channel Right"
   | 0x0C == i  && 0x163 == j  = "Channel Center"
   | 0x0C == i  && 0x164 == j  = "Channel Front"
   | 0x0C == i  && 0x165 == j  = "Channel Center Front"
   | 0x0C == i  && 0x166 == j  = "Channel Side"
   | 0x0C == i  && 0x167 == j  = "Channel Surround"
   | 0x0C == i  && 0x168 == j  = "Channel Low Frequency Enhancement"
   | 0x0C == i  && 0x169 == j  = "Channel Top"
   | 0x0C == i  && 0x16A == j  = "Channel Unknown"
   | 0x0C == i  && 0x16B <= j && j <=0x16F = "Reserved"
   | 0x0C == i  && 0x170 == j  = "Sub-channel"
   | 0x0C == i  && 0x171 == j  = "Sub-channel Increment"
   | 0x0C == i  && 0x172 == j  = "Sub-channel Decrement"
   | 0x0C == i  && 0x173 == j  = "Alternate Audio Increment"
   | 0x0C == i  && 0x174 == j  = "Alternate Audio Decrement"
   | 0x0C == i  && 0x175 <= j && j <=0x17F = "Reserved"
   | 0x0C == i  && 0x180 == j  = "Application Launch Buttons"
   | 0x0C == i  && 0x181 == j  = "AL Launch Button Configuration Tool"
   | 0x0C == i  && 0x182 == j  = "AL Programmable Button Configuration"
   | 0x0C == i  && 0x183 == j  = "AL Consumer Control Configuration"
   | 0x0C == i  && 0x184 == j  = "AL Word Processor"
   | 0x0C == i  && 0x185 == j  = "AL Text Editor"
   | 0x0C == i  && 0x186 == j  = "AL Spreadsheet"
   | 0x0C == i  && 0x187 == j  = "AL Graphics Editor"
   | 0x0C == i  && 0x188 == j  = "AL Presentation App"
   | 0x0C == i  && 0x189 == j  = "AL Database App"
   | 0x0C == i  && 0x18A == j  = "AL Email Reader"
   | 0x0C == i  && 0x18B == j  = "AL Newsreader"
   | 0x0C == i  && 0x18C == j  = "AL Voicemail"
   | 0x0C == i  && 0x18D == j  = "AL Contacts/Address Book"
   | 0x0C == i  && 0x18E == j  = "AL Calendar/Schedule"
   | 0x0C == i  && 0x18F == j  = "AL Task/Project Manager"
   | 0x0C == i  && 0x190 == j  = "AL Log/Journal/Timecard"
   | 0x0C == i  && 0x191 == j  = "AL Checkbook/Finance"
   | 0x0C == i  && 0x192 == j  = "AL Calculator"
   | 0x0C == i  && 0x193 == j  = "AL A/V Capture/Playback"
   | 0x0C == i  && 0x194 == j  = "AL Local Machine Browser"
   | 0x0C == i  && 0x195 == j  = "AL LAN/WAN Browser"
   | 0x0C == i  && 0x196 == j  = "AL Internet Browser"
   | 0x0C == i  && 0x197 == j  = "AL Remote Networking/ISP Connect"
   | 0x0C == i  && 0x198 == j  = "AL Network Conference"
   | 0x0C == i  && 0x199 == j  = "AL Network Chat"
   | 0x0C == i  && 0x19A == j  = "AL Telephony/Dialer"
   | 0x0C == i  && 0x19B == j  = "AL Logon"
   | 0x0C == i  && 0x19C == j  = "AL Logoff"
   | 0x0C == i  && 0x19D == j  = "AL Logon/Logoff"
   | 0x0C == i  && 0x19E == j  = "AL Terminal Lock/Screensaver"
   | 0x0C == i  && 0x19F == j  = "AL Control Panel"
   | 0x0C == i  && 0x1A0 == j  = "AL Command Line Processor/Run"
   | 0x0C == i  && 0x1A1 == j  = "AL Process/Task Manager"
   | 0x0C == i  && 0x1A2 == j  = "AL Select Task/Application"
   | 0x0C == i  && 0x1A3 == j  = "AL Next Task/Application"
   | 0x0C == i  && 0x1A4 == j  = "AL Previous Task/Application"
   | 0x0C == i  && 0x1A5 == j  = "AL Preemptive Halt Task/Application"
   | 0x0C == i  && 0x1A6 == j  = "AL Integrated Help Center"
   | 0x0C == i  && 0x1A7 == j  = "AL Documents"
   | 0x0C == i  && 0x1A8 == j  = "AL Thesaurus"
   | 0x0C == i  && 0x1A9 == j  = "AL Dictionary"
   | 0x0C == i  && 0x1AA == j  = "AL Desktop"
   | 0x0C == i  && 0x1AB == j  = "AL Spell Check"
   | 0x0C == i  && 0x1AC == j  = "AL Grammar Check"
   | 0x0C == i  && 0x1AD == j  = "AL Wireless Status"
   | 0x0C == i  && 0x1AE == j  = "AL Keyboard Layout"
   | 0x0C == i  && 0x1AF == j  = "AL Virus Protection"
   | 0x0C == i  && 0x1B0 == j  = "AL Encryption"
   | 0x0C == i  && 0x1B1 == j  = "AL Screen Saver"
   | 0x0C == i  && 0x1B2 == j  = "AL Alarms"
   | 0x0C == i  && 0x1B3 == j  = "AL Clock"
   | 0x0C == i  && 0x1B4 == j  = "AL File Browser"
   | 0x0C == i  && 0x1B5 == j  = "AL Power Status"
   | 0x0C == i  && 0x1B6 == j  = "AL Image Browser"
   | 0x0C == i  && 0x1B7 == j  = "AL Audio Browser"
   | 0x0C == i  && 0x1B8 == j  = "AL Movie Browser"
   | 0x0C == i  && 0x1B9 == j  = "AL Digital Rights Manager"
   | 0x0C == i  && 0x1BA == j  = "AL Digital Wallet"
   | 0x0C == i  && 0x1BB == j  = "Reserved"
   | 0x0C == i  && 0x1BC == j  = "AL Instant Messaging"
   | 0x0C == i  && 0x1BD == j  = "AL OEM Features/ Tips/Tutorial Browser"
   | 0x0C == i  && 0x1BE == j  = "AL OEM Help"
   | 0x0C == i  && 0x1BF == j  = "AL Online Community"
   | 0x0C == i  && 0x1C0 == j  = "AL Entertainment Content Browser"
   | 0x0C == i  && 0x1C1 == j  = "AL Online Shopping Browser"
   | 0x0C == i  && 0x1C2 == j  = "AL SmartCard Information/Help"
   | 0x0C == i  && 0x1C3 == j  = "AL Market Monitor/Finance Browser"
   | 0x0C == i  && 0x1C4 == j  = "AL Customized Corporate News Browser"
   | 0x0C == i  && 0x1C5 == j  = "AL Online Activity Browser"
   | 0x0C == i  && 0x1C6 == j  = "AL Research/Search Browser"
   | 0x0C == i  && 0x1C7 == j  = "AL Audio Player"
   | 0x0C == i  && 0x1C8 == j  = "AL Message Status"
   | 0x0C == i  && 0x1C9 == j  = "AL Contact Sync"
   | 0x0C == i  && 0x1CA <= j && j <=0x1FF = "Reserved "++(showihex i)++" "++(showihex j)++""
   | 0x0C == i  && 0x200 == j  = "Generic GUI Application Controls"
   | 0x0C == i  && 0x201 == j  = "AC New"
   | 0x0C == i  && 0x202 == j  = "AC Open"
   | 0x0C == i  && 0x203 == j  = "AC Close"
   | 0x0C == i  && 0x204 == j  = "AC Exit"
   | 0x0C == i  && 0x205 == j  = "AC Maximize"
   | 0x0C == i  && 0x206 == j  = "AC Minimize"
   | 0x0C == i  && 0x207 == j  = "AC Save"
   | 0x0C == i  && 0x208 == j  = "AC Print"
   | 0x0C == i  && 0x209 == j  = "AC Properties"
   | 0x0C == i  && 0x21A == j  = "AC Undo"
   | 0x0C == i  && 0x21B == j  = "AC Copy"
   | 0x0C == i  && 0x21C == j  = "AC Cut"
   | 0x0C == i  && 0x21D == j  = "AC Paste"
   | 0x0C == i  && 0x21E == j  = "AC Select All"
   | 0x0C == i  && 0x21F == j  = "AC Find"
   | 0x0C == i  && 0x220 == j  = "AC Find and Replace"
   | 0x0C == i  && 0x221 == j  = "AC Search"
   | 0x0C == i  && 0x222 == j  = "AC Go To"
   | 0x0C == i  && 0x223 == j  = "AC Home"
   | 0x0C == i  && 0x224 == j  = "AC Back"
   | 0x0C == i  && 0x225 == j  = "AC Forward"
   | 0x0C == i  && 0x226 == j  = "AC Stop"
   | 0x0C == i  && 0x227 == j  = "AC Refresh"
   | 0x0C == i  && 0x228 == j  = "AC Previous Link"
   | 0x0C == i  && 0x229 == j  = "AC Next Link"
   | 0x0C == i  && 0x22A == j  = "AC Bookmarks"
   | 0x0C == i  && 0x22B == j  = "AC History"
   | 0x0C == i  && 0x22C == j  = "AC Subscriptions"
   | 0x0C == i  && 0x22D == j  = "AC Zoom In"
   | 0x0C == i  && 0x22E == j  = "AC Zoom Out"
   | 0x0C == i  && 0x22F == j  = "AC Zoom"
   | 0x0C == i  && 0x230 == j  = "AC Full Screen View"
   | 0x0C == i  && 0x231 == j  = "AC Normal View"
   | 0x0C == i  && 0x232 == j  = "AC View Toggle"
   | 0x0C == i  && 0x233 == j  = "AC Scroll Up"
   | 0x0C == i  && 0x234 == j  = "AC Scroll Down"
   | 0x0C == i  && 0x235 == j  = "AC Scroll"
   | 0x0C == i  && 0x236 == j  = "AC Pan Left"
   | 0x0C == i  && 0x237 == j  = "AC Pan Right"
   | 0x0C == i  && 0x238 == j  = "AC Pan"
   | 0x0C == i  && 0x239 == j  = "AC New Window"
   | 0x0C == i  && 0x23A == j  = "AC Tile Horizontally"
   | 0x0C == i  && 0x23B == j  = "AC Tile Vertically"
   | 0x0C == i  && 0x23C == j  = "AC Format"
   | 0x0C == i  && 0x23D == j  = "AC Edit"
   | 0x0C == i  && 0x23E == j  = "AC Bold"
   | 0x0C == i  && 0x23F == j  = "AC Italics"
   | 0x0C == i  && 0x240 == j  = "AC Underline"
   | 0x0C == i  && 0x241 == j  = "AC Strikethrough"
   | 0x0C == i  && 0x242 == j  = "AC Subscript"
   | 0x0C == i  && 0x243 == j  = "AC Superscript"
   | 0x0C == i  && 0x244 == j  = "AC All Caps"
   | 0x0C == i  && 0x245 == j  = "AC Rotate"
   | 0x0C == i  && 0x246 == j  = "AC Resize"
   | 0x0C == i  && 0x247 == j  = "AC Flip horizontal"
   | 0x0C == i  && 0x248 == j  = "AC Flip Vertical"
   | 0x0C == i  && 0x249 == j  = "AC Mirror Horizontal"
   | 0x0C == i  && 0x24A == j  = "AC Mirror Vertical"
   | 0x0C == i  && 0x24B == j  = "AC Font Select"
   | 0x0C == i  && 0x24C == j  = "AC Font Color"
   | 0x0C == i  && 0x24D == j  = "AC Font Size"
   | 0x0C == i  && 0x24E == j  = "AC Justify Left"
   | 0x0C == i  && 0x24F == j  = "AC Justify Center H"
   | 0x0C == i  && 0x250 == j  = "AC Justify Right"
   | 0x0C == i  && 0x251 == j  = "AC Justify Block H"
   | 0x0C == i  && 0x252 == j  = "AC Justify Top"
   | 0x0C == i  && 0x253 == j  = "AC Justify Center V"
   | 0x0C == i  && 0x254 == j  = "AC Justify Bottom"
   | 0x0C == i  && 0x255 == j  = "AC Justify Block V"
   | 0x0C == i  && 0x256 == j  = "AC Indent Decrease"
   | 0x0C == i  && 0x257 == j  = "AC Indent Increase"
   | 0x0C == i  && 0x258 == j  = "AC Numbered List"
   | 0x0C == i  && 0x259 == j  = "AC Restart Numbering"
   | 0x0C == i  && 0x25A == j  = "AC Bulleted List"
   | 0x0C == i  && 0x25B == j  = "AC Promote"
   | 0x0C == i  && 0x25C == j  = "AC Demote"
   | 0x0C == i  && 0x25D == j  = "AC Yes"
   | 0x0C == i  && 0x25E == j  = "AC No"
   | 0x0C == i  && 0x25F == j  = "AC Cancel"
   | 0x0C == i  && 0x260 == j  = "AC Catalog"
   | 0x0C == i  && 0x261 == j  = "AC Buy/Checkout"
   | 0x0C == i  && 0x262 == j  = "AC Add to Cart"
   | 0x0C == i  && 0x263 == j  = "AC Expand"
   | 0x0C == i  && 0x264 == j  = "AC Expand All"
   | 0x0C == i  && 0x265 == j  = "AC Collapse"
   | 0x0C == i  && 0x266 == j  = "AC Collapse All"
   | 0x0C == i  && 0x267 == j  = "AC Print Preview"
   | 0x0C == i  && 0x268 == j  = "AC Paste Special"
   | 0x0C == i  && 0x269 == j  = "AC Insert Mode"
   | 0x0C == i  && 0x26A == j  = "AC Delete"
   | 0x0C == i  && 0x26B == j  = "AC Lock"
   | 0x0C == i  && 0x26C == j  = "AC Unlock"
   | 0x0C == i  && 0x26D == j  = "AC Protect"
   | 0x0C == i  && 0x26E == j  = "AC Unprotect"
   | 0x0C == i  && 0x26F == j  = "AC Attach Comment"
   | 0x0C == i  && 0x270 == j  = "AC Delete Comment"
   | 0x0C == i  && 0x271 == j  = "AC View Comment"
   | 0x0C == i  && 0x272 == j  = "AC Select Word"
   | 0x0C == i  && 0x273 == j  = "AC Select Sentence"
   | 0x0C == i  && 0x274 == j  = "AC Select Paragraph"
   | 0x0C == i  && 0x275 == j  = "AC Select Column"
   | 0x0C == i  && 0x276 == j  = "AC Select Row"
   | 0x0C == i  && 0x277 == j  = "AC Select Table"
   | 0x0C == i  && 0x278 == j  = "AC Select Object"
   | 0x0C == i  && 0x279 == j  = "AC Redo/Repeat"
   | 0x0C == i  && 0x27A == j  = "AC Sort"
   | 0x0C == i  && 0x27B == j  = "AC Sort Ascending"
   | 0x0C == i  && 0x27C == j  = "AC Sort Descending"
   | 0x0C == i  && 0x27D == j  = "AC Filter"
   | 0x0C == i  && 0x27E == j  = "AC Set Clock"
   | 0x0C == i  && 0x27F == j  = "AC View Clock"
   | 0x0C == i  && 0x280 == j  = "AC Select Time Zone"
   | 0x0C == i  && 0x281 == j  = "AC Edit Time Zones"
   | 0x0C == i  && 0x282 == j  = "AC Set Alarm"
   | 0x0C == i  && 0x283 == j  = "AC Clear Alarm"
   | 0x0C == i  && 0x284 == j  = "AC Snooze Alarm"
   | 0x0C == i  && 0x285 == j  = "AC Reset Alarm"
   | 0x0C == i  && 0x286 == j  = "AC Synchronize"
   | 0x0C == i  && 0x287 == j  = "AC Send/Receive"
   | 0x0C == i  && 0x288 == j  = "AC Send To"
   | 0x0C == i  && 0x289 == j  = "AC Reply"
   | 0x0C == i  && 0x28A == j  = "AC Reply All"
   | 0x0C == i  && 0x28B == j  = "AC Forward Msg"
   | 0x0C == i  && 0x28C == j  = "AC Send"
   | 0x0C == i  && 0x28D == j  = "AC Attach File"
   | 0x0C == i  && 0x28E == j  = "AC Upload"
   | 0x0C == i  && 0x28F == j  = "AC Download (Save Target As)"
   | 0x0C == i  && 0x290 == j  = "AC Set Borders"
   | 0x0C == i  && 0x291 == j  = "AC Insert Row"
   | 0x0C == i  && 0x292 == j  = "AC Insert Column"
   | 0x0C == i  && 0x293 == j  = "AC Insert File"
   | 0x0C == i  && 0x294 == j  = "AC Insert Picture"
   | 0x0C == i  && 0x295 == j  = "AC Insert Object"
   | 0x0C == i  && 0x296 == j  = "AC Insert Symbol"
   | 0x0C == i  && 0x297 == j  = "AC Save and Close"
   | 0x0C == i  && 0x298 == j  = "AC Rename"
   | 0x0C == i  && 0x299 == j  = "AC Merge"
   | 0x0C == i  && 0x29A == j  = "AC Split"
   | 0x0C == i  && 0x29B == j  = "AC Disribute Horizontally"
   | 0x0C == i  && 0x29C == j  = "AC Distribute Vertically"
   | 0x0C == i  && 0x29D <= j && j <=0x29F = "Reserved "++(showihex i)++" "++(showihex j)++""
   | 0x0C == i  && 0x2A0 == j  = "AC Soft Key Left"
   | 0x0C == i  && 0x2A1 == j  = "AC Soft Key Right"
   | 0x0C == i  && 0x2A2 <= j && j <=0x2AF = "Reserved "++(showihex i)++" "++(showihex j)++""
   | 0x0C == i  && 0x2B0 == j  = "AC Idle Keep Alive"
   | 0x0C == i  && 0x2B1 <= j && j <=0x4FF = "Reserved "++(showihex i)++" "++(showihex j)++""
   | 0x0C == i  && 0x500 == j  = "Contact Edited"
   | 0x0C == i  && 0x501 == j  = "Contact Added"
   | 0x0C == i  && 0x502 == j  = "Contact Record Active"
   | 0x0C == i  && 0x503 == j  = "Contact Index"
   | 0x0C == i  && 0x504 == j  = "Contact Nickname"
   | 0x0C == i  && 0x505 == j  = "Contact First Name"
   | 0x0C == i  && 0x506 == j  = "Contact Last Name"
   | 0x0C == i  && 0x507 == j  = "Contact Full Name"
   | 0x0C == i  && 0x508 == j  = "Contact Phone Number Personal"
   | 0x0C == i  && 0x509 == j  = "Contact Phone Number Business"
   | 0x0C == i  && 0x50A == j  = "Contact Phone Number Mobile"
   | 0x0C == i  && 0x50B == j  = "Contact Phone Number Pager"
   | 0x0C == i  && 0x50C == j  = "Contact Phone Number Fax"
   | 0x0C == i  && 0x50D == j  = "Contact Phone Number Other"
   | 0x0C == i  && 0x50E == j  = "Contact Email Personal"
   | 0x0C == i  && 0x50F == j  = "Contact Email Business"
   | 0x0C == i  && 0x510 == j  = "Contact Email Other"
   | 0x0C == i  && 0x511 == j  = "Contact Email Main"
   | 0x0C == i  && 0x512 == j  = "Contact Speed Dial Number"
   | 0x0C == i  && 0x513 == j  = "Contact Status Flag"
   | 0x0C == i  && 0x514 == j  = "Contact Misc."
   | 0x0C == i  && 0x515 <= j && j <=0xFFFF = "Reserved "++(showihex i)++" "++(showihex j)++""
--  000D_digit.upg
   | 0x0D == i  && 0x00 == j  = "Undefined"++(showihex i)++" "++(showihex j)++""
   | 0x0D == i  && 0x01 == j  = "Digitizer"
   | 0x0D == i  && 0x02 == j  = "Pen"
   | 0x0D == i  && 0x03 == j  = "Light Pen"
   | 0x0D == i  && 0x04 == j  = "Touch Screen"
   | 0x0D == i  && 0x05 == j  = "Touch Pad"
   | 0x0D == i  && 0x06 == j  = "White Board"
   | 0x0D == i  && 0x07 == j  = "Coordinate Measuring"
   | 0x0D == i  && 0x08 == j  = "Machine 3D Digitizer"
   | 0x0D == i  && 0x09 == j  = "Stereo Plotter"
   | 0x0D == i  && 0x0A == j  = "Articulated Arm"
   | 0x0D == i  && 0x0B == j  = "Armature"
   | 0x0D == i  && 0x0C == j  = "Multiple Point Digitizer"
   | 0x0D == i  && 0x0D == j  = "Free Space Wand"
   | 0x0D == i  && 0x0E == j  = "Device configuration"
   | 0x0D == i  && 0x0F <= j && j <=0x1F = "Reserved"++(showihex i)++" "++(showihex j)++""
   | 0x0D == i  && 0x20 == j  = "Stylus"
   | 0x0D == i  && 0x21 == j  = "Puck"
   | 0x0D == i  && 0x22 == j  = "Finger"
   | 0x0D == i  && 0x23 == j  = "Device settings"
   | 0x0D == i  && 0x24 <= j && j <=0x2F = "Reserved"++(showihex i)++" "++(showihex j)++""
   | 0x0D == i  && 0x30 == j  = "Tip Pressure"
   | 0x0D == i  && 0x31 == j  = "Barrel Pressure"
   | 0x0D == i  && 0x32 == j  = "In Range"
   | 0x0D == i  && 0x33 == j  = "Touch"
   | 0x0D == i  && 0x34 == j  = "Untouch"
   | 0x0D == i  && 0x35 == j  = "Tap"
   | 0x0D == i  && 0x36 == j  = "Quality"
   | 0x0D == i  && 0x37 == j  = "Data Valid"
   | 0x0D == i  && 0x38 == j  = "Transducer Index"
   | 0x0D == i  && 0x39 == j  = "Tablet Function Keys"
   | 0x0D == i  && 0x3A == j  = "Program Change Keys"
   | 0x0D == i  && 0x3B == j  = "Battery Strength"
   | 0x0D == i  && 0x3C == j  = "Invert"
   | 0x0D == i  && 0x3D == j  = "X Tilt"
   | 0x0D == i  && 0x3E == j  = "Y Tilt"
   | 0x0D == i  && 0x3F == j  = "Azimuth"
   | 0x0D == i  && 0x40 == j  = "Altitude"
   | 0x0D == i  && 0x41 == j  = "Twist"
   | 0x0D == i  && 0x42 == j  = "Tip Switch"
   | 0x0D == i  && 0x43 == j  = "Secondary Tip Switch"
   | 0x0D == i  && 0x44 == j  = "Barrel Switch"
   | 0x0D == i  && 0x45 == j  = "Eraser"
   | 0x0D == i  && 0x46 == j  = "Tablet Pick"
   | 0x0D == i  && 0x47 == j  = "Touch Valid"
   | 0x0D == i  && 0x48 == j  = "Width"
   | 0x0D == i  && 0x49 == j  = "Height"
   | 0x0D == i  && 0x4A <= j && j <=0x50 = "Reserved"++(showihex i)++" "++(showihex j)++""
   | 0x0D == i  && 0x51 == j  = "Contact identifier"
   | 0x0D == i  && 0x52 == j  = "Device mode"
   | 0x0D == i  && 0x53 == j  = "Device identifier"
   | 0x0D == i  && 0x54 == j  = "Contact count"
   | 0x0D == i  && 0x55 == j  = "Contact count maximum"
   | 0x0D == i  && 0x56 <= j && j <=0xFFFF = "Reserved"++(showihex i)++" "++(showihex j)++""
--  000E_reserved.upg
   | 0x0E == i  && 0x00 <= j && j <=0xFFFF = "Unknown"++(showihex i)++" "++(showihex j)++""
--  000F_PID.upg
   | 0x0F == i  && 0x00 == j  = "Undefined"++(showihex i)++" "++(showihex j)++""
   | 0x0F == i  && 0x01 == j  = "Physical Interface Device"
   | 0x0F == i  && 0x02 <= j && j <=0x1F = "Reserved"++(showihex i)++" "++(showihex j)++""
   | 0x0F == i  && 0x20 == j  = "Normal"
   | 0x0F == i  && 0x21 == j  = "Set Effect Report"
   | 0x0F == i  && 0x22 == j  = "Effect Block Index"
   | 0x0F == i  && 0x23 == j  = "Parameter Block Offset"
   | 0x0F == i  && 0x24 == j  = "ROM Flag"
   | 0x0F == i  && 0x25 == j  = "Effect Type"
   | 0x0F == i  && 0x26 == j  = "ET Constant Force"
   | 0x0F == i  && 0x27 == j  = "ET Ramp"
   | 0x0F == i  && 0x28 == j  = "ET Custom Force Data"
   | 0x0F == i  && 0x29 <= j && j <=0x2F = "Reserved"++(showihex i)++" "++(showihex j)++""
   | 0x0F == i  && 0x30 == j  = "ET Square"
   | 0x0F == i  && 0x31 == j  = "ET Sine"
   | 0x0F == i  && 0x32 == j  = "ET Triangle"
   | 0x0F == i  && 0x33 == j  = "ET Sawtooth Up"
   | 0x0F == i  && 0x34 == j  = "ET Sawtooth Down"
   | 0x0F == i  && 0x35 <= j && j <=0x3F = "Reserved"++(showihex i)++" "++(showihex j)++""
   | 0x0F == i  && 0x40 == j  = "ET Spring"
   | 0x0F == i  && 0x41 == j  = "ET Damper"
   | 0x0F == i  && 0x42 == j  = "ET Inertia"
   | 0x0F == i  && 0x43 == j  = "ET Friction"
   | 0x0F == i  && 0x44 <= j && j <=0x4F = "Reserved"++(showihex i)++" "++(showihex j)++""
   | 0x0F == i  && 0x50 == j  = "Duration"
   | 0x0F == i  && 0x51 == j  = "Sample Period"
   | 0x0F == i  && 0x52 == j  = "Gain"
   | 0x0F == i  && 0x53 == j  = "Trigger Button"
   | 0x0F == i  && 0x54 == j  = "Trigger Repeat Interval"
   | 0x0F == i  && 0x55 == j  = "Axes Enable"
   | 0x0F == i  && 0x56 == j  = "Direction Enable"
   | 0x0F == i  && 0x57 == j  = "Direction"
   | 0x0F == i  && 0x58 == j  = "Type Specific Block Offset"
   | 0x0F == i  && 0x59 == j  = "Block Type"
   | 0x0F == i  && 0x5A == j  = "Set Envelope Report"
   | 0x0F == i  && 0x5B == j  = "Attack Level"
   | 0x0F == i  && 0x5C == j  = "Attack Time"
   | 0x0F == i  && 0x5D == j  = "Fade Level"
   | 0x0F == i  && 0x5E == j  = "Fade Time"
   | 0x0F == i  && 0x5F == j  = "Set Condition Report"
   | 0x0F == i  && 0x60 == j  = "CP Offset"
   | 0x0F == i  && 0x61 == j  = "Positive Coefficient"
   | 0x0F == i  && 0x62 == j  = "Negative Coefficient"
   | 0x0F == i  && 0x63 == j  = "Positive Saturation"
   | 0x0F == i  && 0x64 == j  = "Negative Saturation"
   | 0x0F == i  && 0x65 == j  = "Dead Band"
   | 0x0F == i  && 0x66 == j  = "Download Force Sample"
   | 0x0F == i  && 0x67 == j  = "Isoch Custom Force Enable"
   | 0x0F == i  && 0x68 == j  = "Custom Force Data Report"
   | 0x0F == i  && 0x69 == j  = "Custom Force Data"
   | 0x0F == i  && 0x6A == j  = "Custom Force Vendor Defined Data"
   | 0x0F == i  && 0x6B == j  = "Set Custom Force Report"
   | 0x0F == i  && 0x6C == j  = "Custom Force Data Offset"
   | 0x0F == i  && 0x6D == j  = "Sample Count"
   | 0x0F == i  && 0x6E == j  = "Set Periodic Report"
   | 0x0F == i  && 0x6F == j  = "Offset"
   | 0x0F == i  && 0x70 == j  = "Magnitude"
   | 0x0F == i  && 0x71 == j  = "Phase"
   | 0x0F == i  && 0x72 == j  = "Period"
   | 0x0F == i  && 0x73 == j  = "Set Constant Force Report"
   | 0x0F == i  && 0x74 == j  = "Set Ramp Force Report"
   | 0x0F == i  && 0x75 == j  = "Ramp Start"
   | 0x0F == i  && 0x76 == j  = "Ramp End"
   | 0x0F == i  && 0x77 == j  = "Effect Operation Report"
   | 0x0F == i  && 0x78 == j  = "Effect Operation"
   | 0x0F == i  && 0x79 == j  = "Op Effect Start"
   | 0x0F == i  && 0x7A == j  = "Op Effect Start Solo"
   | 0x0F == i  && 0x7B == j  = "Op Effect Stop"
   | 0x0F == i  && 0x7C == j  = "Loop Count"
   | 0x0F == i  && 0x7D == j  = "Device Gain Report"
   | 0x0F == i  && 0x7E == j  = "Device Gain"
   | 0x0F == i  && 0x7F == j  = "PID Pool Report"
   | 0x0F == i  && 0x80 == j  = "RAM Pool Size"
   | 0x0F == i  && 0x81 == j  = "ROM Pool Size"
   | 0x0F == i  && 0x82 == j  = "ROM Effect Block Count"
   | 0x0F == i  && 0x83 == j  = "Simultaneous Effects Max"
   | 0x0F == i  && 0x84 == j  = "Pool Alignment"
   | 0x0F == i  && 0x85 == j  = "PID Pool Move Report"
   | 0x0F == i  && 0x86 == j  = "Move Source"
   | 0x0F == i  && 0x87 == j  = "Move Destination"
   | 0x0F == i  && 0x88 == j  = "Move Length"
   | 0x0F == i  && 0x89 == j  = "PID Block Load Report"
   | 0x0F == i  && 0x8A == j  = "Reserved"++(showihex i)++" "++(showihex j)++""
   | 0x0F == i  && 0x8B == j  = "Block Load Status"
   | 0x0F == i  && 0x8C == j  = "Block Load Success"
   | 0x0F == i  && 0x8D == j  = "Block Load Full"
   | 0x0F == i  && 0x8E == j  = "Block Load Error"
   | 0x0F == i  && 0x8F == j  = "Block Handle"
   | 0x0F == i  && 0x90 == j  = "PID Block Free Report"
   | 0x0F == i  && 0x91 == j  = "Type Specific Block Handle"
   | 0x0F == i  && 0x92 == j  = "PID State Report"
   | 0x0F == i  && 0x93 == j  = "Reserved"++(showihex i)++" "++(showihex j)++""
   | 0x0F == i  && 0x94 == j  = "Effect Playing"
   | 0x0F == i  && 0x95 == j  = "PID Device Control Report"
   | 0x0F == i  && 0x96 == j  = "PID Device Control"
   | 0x0F == i  && 0x97 == j  = "DC Enable Actuators"
   | 0x0F == i  && 0x98 == j  = "DC Disable Actuators"
   | 0x0F == i  && 0x99 == j  = "DC Stop All Effects"
   | 0x0F == i  && 0x9A == j  = "DC Device Reset"
   | 0x0F == i  && 0x9B == j  = "DC Device Pause"
   | 0x0F == i  && 0x9C == j  = "DC Device Continue"
   | 0x0F == i  && 0x9D == j  = "Reserved"++(showihex i)++" "++(showihex j)++""
   | 0x0F == i  && 0x9E == j  = "Reserved"++(showihex i)++" "++(showihex j)++""
   | 0x0F == i  && 0x9F == j  = "Device Paused"
   | 0x0F == i  && 0xA0 == j  = "Actuators Enabled"
   | 0x0F == i  && 0xA1 <= j && j <=0xA3 = "Reserved"++(showihex i)++" "++(showihex j)++""
   | 0x0F == i  && 0xA4 == j  = "Safety Switch"
   | 0x0F == i  && 0xA5 == j  = "Actuator Override Switch"
   | 0x0F == i  && 0xA6 == j  = "Actuator Power"
   | 0x0F == i  && 0xA7 == j  = "Start Delay"
   | 0x0F == i  && 0xA8 == j  = "Parameter Block Size"
   | 0x0F == i  && 0xA9 == j  = "Device Managed Pool"
   | 0x0F == i  && 0xAA == j  = "Shared Parameter Blocks"
   | 0x0F == i  && 0xAB == j  = "Create New Effect Report"
   | 0x0F == i  && 0xAC == j  = "RAM Pool Available"
   | 0x0F == i  && 0xAE <= j && j <=0xFFFF = "Reserved"++(showihex i)++" "++(showihex j)++""
--  0010_unicode.upg
   | 0x10 == i  && 0x00 <= j && j <=0xFFFF = "Unicode Char "++(showihex j)++""
--  0011-0013_reserved.upg
   | 0x11 <= i && i <=0x13 && 0x00 <= j && j <=0xFFFF = "Unknown"++(showihex i)++" "++(showihex j)++""
--  0014_andisp.upg
   | 0x14 == i  && 0x00 == j  = "Undefined"++(showihex i)++" "++(showihex j)++""
   | 0x14 == i  && 0x01 == j  = "Alphanumeric Display"
   | 0x14 == i  && 0x02 == j  = "Auxiliary Display"
   | 0x14 == i  && 0x03 <= j && j <=0x1F = "Reserved"++(showihex i)++" "++(showihex j)++""
   | 0x14 == i  && 0x20 == j  = "Display Attributes Report"
   | 0x14 == i  && 0x21 == j  = "ASCII Character Set"
   | 0x14 == i  && 0x22 == j  = "Data Read Back"
   | 0x14 == i  && 0x23 == j  = "Font Read Back"
   | 0x14 == i  && 0x24 == j  = "Display Control Report"
   | 0x14 == i  && 0x25 == j  = "Clear Display"
   | 0x14 == i  && 0x26 == j  = "Display Enable"
   | 0x14 == i  && 0x27 == j  = "Screen Saver Delay"
   | 0x14 == i  && 0x28 == j  = "Screen Saver Enable"
   | 0x14 == i  && 0x29 == j  = "Vertical Scroll"
   | 0x14 == i  && 0x2A == j  = "Horizontal Scroll"
   | 0x14 == i  && 0x2B == j  = "Character Report"
   | 0x14 == i  && 0x2C == j  = "Display Data"
   | 0x14 == i  && 0x2D == j  = "Display Status"
   | 0x14 == i  && 0x2E == j  = "Stat Not Ready"
   | 0x14 == i  && 0x2F == j  = "Stat Ready"
   | 0x14 == i  && 0x30 == j  = "Err Not a loadable character"
   | 0x14 == i  && 0x31 == j  = "Err Font data cannot be read"
   | 0x14 == i  && 0x32 == j  = "Cursor Position Report"
   | 0x14 == i  && 0x33 == j  = "Row"
   | 0x14 == i  && 0x34 == j  = "Column"
   | 0x14 == i  && 0x35 == j  = "Rows"
   | 0x14 == i  && 0x36 == j  = "Columns"
   | 0x14 == i  && 0x37 == j  = "Cursor Pixel Positioning"
   | 0x14 == i  && 0x38 == j  = "Cursor Mode"
   | 0x14 == i  && 0x39 == j  = "Cursor Enable"
   | 0x14 == i  && 0x3A == j  = "Cursor Blink"
   | 0x14 == i  && 0x3B == j  = "Font Report"
   | 0x14 == i  && 0x3C == j  = "Font Data"
   | 0x14 == i  && 0x3D == j  = "Character Width"
   | 0x14 == i  && 0x3E == j  = "Character Height"
   | 0x14 == i  && 0x3F == j  = "Character Spacing Horizontal"
   | 0x14 == i  && 0x40 == j  = "Character Spacing Vertical"
   | 0x14 == i  && 0x41 == j  = "Unicode Character Set"
   | 0x14 == i  && 0x42 == j  = "Font 7-Segment"
   | 0x14 == i  && 0x43 == j  = "7-Segment Direct Map"
   | 0x14 == i  && 0x44 == j  = "Font 14-Segment"
   | 0x14 == i  && 0x45 == j  = "14-Segment Direct Map"
   | 0x14 == i  && 0x46 == j  = "Display Brightness"
   | 0x14 == i  && 0x47 == j  = "Display Contrast"
   | 0x14 == i  && 0x48 == j  = "Character Attribute"
   | 0x14 == i  && 0x49 == j  = "Attribute Readback"
   | 0x14 == i  && 0x4A == j  = "Attribute Data"
   | 0x14 == i  && 0x4B == j  = "Char Attr Enhance"
   | 0x14 == i  && 0x4C == j  = "Char Attr Underline"
   | 0x14 == i  && 0x4D == j  = "Char Attr Blink"
   | 0x14 == i  && 0x4E <= j && j <=0x7F = "Reserved"++(showihex i)++" "++(showihex j)++""
   | 0x14 == i  && 0x80 == j  = "Bitmap Size X"
   | 0x14 == i  && 0x81 == j  = "Bitmap Size Y"
   | 0x14 == i  && 0x82 == j  = "Reserved"++(showihex i)++" "++(showihex j)++""
   | 0x14 == i  && 0x83 == j  = "Bit Depth Format"
   | 0x14 == i  && 0x84 == j  = "Display Orientation"
   | 0x14 == i  && 0x85 == j  = "Palette Report"
   | 0x14 == i  && 0x86 == j  = "Palette Data Size"
   | 0x14 == i  && 0x87 == j  = "Palette Data Offset"
   | 0x14 == i  && 0x88 == j  = "Palette Data"
   | 0x14 == i  && 0x8A == j  = "Blit Report"
   | 0x14 == i  && 0x8B == j  = "Blit Rectangle X1"
   | 0x14 == i  && 0x8C == j  = "Blit Rectangle Y1"
   | 0x14 == i  && 0x8D == j  = "Blit Rectangle X2"
   | 0x14 == i  && 0x8E == j  = "Blit Rectangle Y2"
   | 0x14 == i  && 0x8F == j  = "Blit Data"
   | 0x14 == i  && 0x90 == j  = "Soft Button"
   | 0x14 == i  && 0x91 == j  = "Soft Button ID"
   | 0x14 == i  && 0x92 == j  = "Soft Button Side"
   | 0x14 == i  && 0x93 == j  = "Soft Button Offset 1"
   | 0x14 == i  && 0x94 == j  = "Soft Button Offset 2"
   | 0x14 == i  && 0x95 == j  = "Soft Button Report"
   | 0x14 == i  && 0x96 <= j && j <=0xC1 = "Reserved "++(showihex i)++" "++(showihex j)++""
   | 0x14 == i  && 0xC2 == j  = "Soft Keys"
   | 0x14 == i  && 0xC3 <= j && j <=0xCB = "Reserved "++(showihex i)++" "++(showihex j)++""
   | 0x14 == i  && 0xCC == j  = "Display Data Extensions"
   | 0x14 == i  && 0xDD <= j && j <=0xCE = "Reserved "++(showihex i)++" "++(showihex j)++""
   | 0x14 == i  && 0xCF == j  = "Character Mapping"
   | 0x14 == i  && 0xD0 <= j && j <=0xDC = "Reserved "++(showihex i)++" "++(showihex j)++""
   | 0x14 == i  && 0xDD == j  = "Unicode Equivalent"
   | 0x14 == i  && 0xDE == j  = "Reserved "++(showihex i)++" "++(showihex j)++""
   | 0x14 == i  && 0xDF == j  = "Character Page Mapping"
   | 0x14 == i  && 0xF0 <= j && j <=0xFE = "Reserved "++(showihex i)++" "++(showihex j)++""
   | 0x14 == i  && 0xFF == j  = "Request Report"
   | 0x14 == i  && 0x100 <= j && j <=0xFFFF = "Reserved"++(showihex i)++" "++(showihex j)++""
--  0015-001F_reserved.upg
   | 0x15 <= i && i <=0x1F && 0x00 <= j && j <=0xFFFF = "Unknown"++(showihex i)++" "++(showihex j)++""
--  0020_sensor.upg
   | 0x20 == i  && 0x00 == j  = "Undefined"
   | 0x20 == i  && 0x01 == j  = "Sensor"
   | 0x20 == i  && 0x02 <= j && j <=0x0F = "Reserved "++(showihex i)++" "++(showihex j)++""
   | 0x20 == i  && 0x10 == j  = "Biometric"
   | 0x20 == i  && 0x11 == j  = "Biometric: Human Presence"
   | 0x20 == i  && 0x12 == j  = "Biometric: Human Proximity"
   | 0x20 == i  && 0x13 == j  = "Biometric: Human Touch"
   | 0x20 == i  && 0x14 <= j && j <=0x1F = "Reserved "++(showihex i)++" "++(showihex j)++""
   | 0x20 == i  && 0x20 == j  = "Electrical"
   | 0x20 == i  && 0x21 == j  = "Electrical: Capacitance"
   | 0x20 == i  && 0x22 == j  = "Electrical: Current"
   | 0x20 == i  && 0x23 == j  = "Electrical: Power"
   | 0x20 == i  && 0x24 == j  = "Electrical: Inductance"
   | 0x20 == i  && 0x25 == j  = "Electrical: Resistance"
   | 0x20 == i  && 0x26 == j  = "Electrical: Voltage"
   | 0x20 == i  && 0x27 == j  = "Electrical: Potentiometer"
   | 0x20 == i  && 0x28 == j  = "Electrical: Frequency"
   | 0x20 == i  && 0x29 == j  = "Electrical: Period"
   | 0x20 == i  && 0x2A <= j && j <=0x2F = "Electrical: Reserved "++(showihex i)++" "++(showihex j)++""
   | 0x20 == i  && 0x30 == j  = "Environmental"
   | 0x20 == i  && 0x31 == j  = "Environmental: Atmospheric Pressure"
   | 0x20 == i  && 0x32 == j  = "Environmental: Humidity"
   | 0x20 == i  && 0x33 == j  = "Environmental: Temperature"
   | 0x20 == i  && 0x34 == j  = "Environmental: Wind Direction"
   | 0x20 == i  && 0x35 == j  = "Environmental: Wind Speed"
   | 0x20 == i  && 0x36 <= j && j <=0x3F = "Environmental: Reserved "++(showihex i)++" "++(showihex j)++""
   | 0x20 == i  && 0x40 == j  = "Light"
   | 0x20 == i  && 0x41 == j  = "Light: Ambient Light"
   | 0x20 == i  && 0x42 == j  = "Light: Consumer Infrared"
   | 0x20 == i  && 0x43 <= j && j <=0x4F = "Light: Reserved "++(showihex i)++" "++(showihex j)++""
   | 0x20 == i  && 0x50 == j  = "Location"
   | 0x20 == i  && 0x51 == j  = "Location: Broadcast"
   | 0x20 == i  && 0x52 == j  = "Location: Dead Reckoning"
   | 0x20 == i  && 0x53 == j  = "Location: GPS (Global Positioning System)"
   | 0x20 == i  && 0x54 == j  = "Location: Lookup"
   | 0x20 == i  && 0x55 == j  = "Location: Other"
   | 0x20 == i  && 0x56 == j  = "Location: Static"
   | 0x20 == i  && 0x57 == j  = "Location: Triangulation"
   | 0x20 == i  && 0x58 <= j && j <=0x5F = "Location: Reserved "++(showihex i)++" "++(showihex j)++""
   | 0x20 == i  && 0x60 == j  = "Mechanical"
   | 0x20 == i  && 0x61 == j  = "Mechanical: Boolean Switch"
   | 0x20 == i  && 0x62 == j  = "Mechanical: Boolean Switch Array"
   | 0x20 == i  && 0x63 == j  = "Mechanical: Multivalue Switch"
   | 0x20 == i  && 0x64 == j  = "Mechanical: Force"
   | 0x20 == i  && 0x65 == j  = "Mechanical: Pressure"
   | 0x20 == i  && 0x66 == j  = "Mechanical: Strain"
   | 0x20 == i  && 0x67 == j  = "Mechanical: Weight"
   | 0x20 == i  && 0x68 == j  = "Mechanical: Haptic Vibrator"
   | 0x20 == i  && 0x69 == j  = "Mechanical: Hall Effect Switch"
   | 0x20 == i  && 0x6A <= j && j <=0x6F = "Mechanical: Reserved "++(showihex i)++" "++(showihex j)++""
   | 0x20 == i  && 0x70 == j  = "Motion"
   | 0x20 == i  && 0x71 == j  = "Motion: Accelerometer 1D"
   | 0x20 == i  && 0x72 == j  = "Motion: Accelerometer 2D"
   | 0x20 == i  && 0x73 == j  = "Motion: Accelerometer 3D"
   | 0x20 == i  && 0x74 == j  = "Motion: Gyrometer 1D"
   | 0x20 == i  && 0x75 == j  = "Motion: Gyrometer 2D"
   | 0x20 == i  && 0x76 == j  = "Motion: Gyrometer 3D"
   | 0x20 == i  && 0x77 == j  = "Motion: Motion Detector"
   | 0x20 == i  && 0x78 == j  = "Motion: Speedometer"
   | 0x20 == i  && 0x79 == j  = "Motion: Accelerometer (any number of axes)"
   | 0x20 == i  && 0x7A == j  = "Motion: Gyrometer (any number of axes)"
   | 0x20 == i  && 0x7B <= j && j <=0x7F = "Motion: Reserved "++(showihex i)++" "++(showihex j)++""
   | 0x20 == i  && 0x80 == j  = "Orientation"
   | 0x20 == i  && 0x81 == j  = "Orientation: Compass 1D"
   | 0x20 == i  && 0x82 == j  = "Orientation: Compass 2D"
   | 0x20 == i  && 0x83 == j  = "Orientation: Compass 3D"
   | 0x20 == i  && 0x84 == j  = "Orientation: Inclinometer 1D"
   | 0x20 == i  && 0x85 == j  = "Orientation: Inclinometer 2D"
   | 0x20 == i  && 0x86 == j  = "Orientation: Inclinometer 3D"
   | 0x20 == i  && 0x87 == j  = "Orientation: Distance 1D"
   | 0x20 == i  && 0x88 == j  = "Orientation: Distance 2D"
   | 0x20 == i  && 0x89 == j  = "Orientation: Distance 3D"
   | 0x20 == i  && 0x8A == j  = "Orientation: Device Orientation"
   | 0x20 == i  && 0x8B == j  = "Orientation: Compass (any number of axes)"
   | 0x20 == i  && 0x8C == j  = "Orientation: Inclinometer (any number of axes)"
   | 0x20 == i  && 0x8D == j  = "Orientation: Distance (any number of axes)"
   | 0x20 == i  && 0x8E <= j && j <=0x8F = "Orientation: Reserved"++(showihex i)++" "++(showihex j)++""
   | 0x20 == i  && 0x90 == j  = "Scanner"
   | 0x20 == i  && 0x91 == j  = "Scanner: Barcode"
   | 0x20 == i  && 0x92 == j  = "Scanner: RFID"
   | 0x20 == i  && 0x93 == j  = "Scanner: NFC"
   | 0x20 == i  && 0x94 <= j && j <=0x9F = "Scanner: Reserved "++(showihex i)++" "++(showihex j)++""
   | 0x20 == i  && 0xA0 == j  = "Time"
   | 0x20 == i  && 0xA1 == j  = "Time: Alarm Timer"
   | 0x20 == i  && 0xA2 == j  = "Time: Real Time Clock"
   | 0x20 == i  && 0xA3 <= j && j <=0xAF = "Time: Reserved "++(showihex i)++" "++(showihex j)++""
   | 0x20 == i  && 0xB0 <= j && j <=0xDF = "Reserved"
   | 0x20 == i  && 0xE0 == j  = "Other"
   | 0x20 == i  && 0xE1 == j  = "Other: Custom"
   | 0x20 == i  && 0xE2 == j  = "Other: Generic"
   | 0x20 == i  && 0xE3 == j  = "Other: Generic Enumerator"
   | 0x20 == i  && 0xE4 <= j && j <=0xEF = "Other: Reserved"++(showihex i)++" "++(showihex j)++""
   | 0x20 == i  && 0xF0 <= j && j <=0xFF = "Reserved for Vendors/OEMs"
   | 0x20 == i  && 0x100 <= j && j <=0x1FF = "Reserved "++(showihex i)++" "++(showihex j)++""
   | 0x20 == i  && 0x200 == j  = "Event"
   | 0x20 == i  && 0x201 == j  = "Event: Sensor State"
   | 0x20 == i  && 0x202 == j  = "Event: Sensor Event"
   | 0x20 == i  && 0x203 <= j && j <=0x2FF = "Event: Reserved "++(showihex i)++" "++(showihex j)++""
   | 0x20 == i  && 0x300 == j  = "Property"
   | 0x20 == i  && 0x301 == j  = "Property: Friendly Name"
   | 0x20 == i  && 0x302 == j  = "Property: Persistent Unique ID"
   | 0x20 == i  && 0x303 == j  = "Property: Sensor Status"
   | 0x20 == i  && 0x304 == j  = "Property: Minimum Report Interval (default Unit:milliseconds)"
   | 0x20 == i  && 0x305 == j  = "Property: Sensor Manufacturer"
   | 0x20 == i  && 0x306 == j  = "Property: Sensor Model"
   | 0x20 == i  && 0x307 == j  = "Property: Sensor Serial Number"
   | 0x20 == i  && 0x308 == j  = "Property: Sensor Description"
   | 0x20 == i  && 0x309 == j  = "Property: Sensor Connection Type"
   | 0x20 == i  && 0x30A == j  = "Property: Sensor Device Path"
   | 0x20 == i  && 0x30B == j  = "Property: Hardware Revision"
   | 0x20 == i  && 0x30C == j  = "Property: Firmware Version"
   | 0x20 == i  && 0x30D == j  = "Property: Release Date"
   | 0x20 == i  && 0x30E == j  = "Property: Report Interval (default Unit: milliseconds)"
   | 0x20 == i  && 0x30F == j  = "Property: Change Sensitivity Absolute"
   | 0x20 == i  && 0x310 == j  = "Property: Change Sensitivity Percent of Range"
   | 0x20 == i  && 0x311 == j  = "Property: Change Sensitivity Percent Relative"
   | 0x20 == i  && 0x312 == j  = "Property: Accuracy"
   | 0x20 == i  && 0x313 == j  = "Property: Resolution"
   | 0x20 == i  && 0x314 == j  = "Property: Maximum"
   | 0x20 == i  && 0x315 == j  = "Property: Minimum"
   | 0x20 == i  && 0x316 == j  = "Property: Reporting State"
   | 0x20 == i  && 0x317 == j  = "Property: Sampling Rate (default Unit: milliseconds)"
   | 0x20 == i  && 0x318 == j  = "Property: Response Curve"
   | 0x20 == i  && 0x319 == j  = "Property: Power State"
   | 0x20 == i  && 0x31A <= j && j <=0x3FF = "Property: Reserved "++(showihex i)++" "++(showihex j)++""
   | 0x20 == i  && 0x400 == j  = "Data Field: Location"
   | 0x20 == i  && 0x401 == j  = "Data Field: Location Reserved"
   | 0x20 == i  && 0x402 == j  = "Data Field: Altitude Antenna Sea Level (default Unit:meters)"
   | 0x20 == i  && 0x403 == j  = "Data Field: Differential Reference Station ID"
   | 0x20 == i  && 0x404 == j  = "Data Field: Altitude Ellipsoid Error (default Unit:meters)"
   | 0x20 == i  && 0x405 == j  = "Data Field: Altitude Ellipsoid (default Unit: meters)"
   | 0x20 == i  && 0x406 == j  = "Data Field: Altitude Sea Level Error (default Unit:meters)"
   | 0x20 == i  && 0x407 == j  = "Data Field: Altitude Sea Level (default Unit: meters)"
   | 0x20 == i  && 0x408 == j  = "Data Field: Differential GPS Data Age (default Unit:seconds)"
   | 0x20 == i  && 0x409 == j  = "Data Field: Error Radius (default Unit: meters)"
   | 0x20 == i  && 0x40A == j  = "Data Field: Fix Quality"
   | 0x20 == i  && 0x40B == j  = "Data Field: Fix Type"
   | 0x20 == i  && 0x40C == j  = "Data Field: Geoidal Separation (default Unit:meters)"
   | 0x20 == i  && 0x40D == j  = "Data Field: GPS Operation Mode"
   | 0x20 == i  && 0x40E == j  = "Data Field: GPS Selection Mode"
   | 0x20 == i  && 0x40F == j  = "Data Field: GPS Status"
   | 0x20 == i  && 0x410 == j  = "Data Field: Position Dilution of Precision"
   | 0x20 == i  && 0x411 == j  = "Data Field: Horizontal Dilution of Precision"
   | 0x20 == i  && 0x412 == j  = "Data Field: Vertical Dilution of Precision"
   | 0x20 == i  && 0x413 == j  = "Data Field: Latitude (default Unit: degrees)"
   | 0x20 == i  && 0x414 == j  = "Data Field: Longitude (default Unit: degrees)"
   | 0x20 == i  && 0x415 == j  = "Data Field: True Heading (default Unit: degrees)"
   | 0x20 == i  && 0x416 == j  = "Data Field: Magnetic Heading (default Unit:degrees)"
   | 0x20 == i  && 0x417 == j  = "Data Field: Magnetic Variation (default Unit:degrees)"
   | 0x20 == i  && 0x418 == j  = "Data Field: Speed (default Unit: knots)"
   | 0x20 == i  && 0x419 == j  = "Data Field: Satellites in View"
   | 0x20 == i  && 0x41A == j  = "Data Field: Satellites in View Azimuth"
   | 0x20 == i  && 0x41B == j  = "Data Field: Satellites in View Elevation"
   | 0x20 == i  && 0x41C == j  = "Data Field: Satellites in View IDs"
   | 0x20 == i  && 0x41D == j  = "Data Field: Satellites in View PRNs"
   | 0x20 == i  && 0x41E == j  = "Data Field: Satellites in View S/N Ratios"
   | 0x20 == i  && 0x41F == j  = "Data Field: Satellites Used Count"
   | 0x20 == i  && 0x420 == j  = "Data Field: Satellites Used PRNs"
   | 0x20 == i  && 0x421 == j  = "Data Field: NMEA Sentence"
   | 0x20 == i  && 0x422 == j  = "Data Field: Address Line 1"
   | 0x20 == i  && 0x423 == j  = "Data Field: Address Line 2"
   | 0x20 == i  && 0x424 == j  = "Data Field: City"
   | 0x20 == i  && 0x425 == j  = "Data Field: State or Province"
   | 0x20 == i  && 0x426 == j  = "Data Field: Country or Region (ISO 3166)"
   | 0x20 == i  && 0x427 == j  = "Data Field: Postal Code"
   | 0x20 == i  && 0x428 <= j && j <=0x429 = "Data Field: Location Reserved"++(showihex i)++" "++(showihex j)++""
   | 0x20 == i  && 0x42A == j  = "Property: Location"
   | 0x20 == i  && 0x42B == j  = "Property: Location Desired Accuracy"
   | 0x20 == i  && 0x42C <= j && j <=0x42F = "Property: Location Reserved"++(showihex i)++" "++(showihex j)++""
   | 0x20 == i  && 0x430 == j  = "Data Field: Environmental"
   | 0x20 == i  && 0x431 == j  = "Data Field: Atmospheric Pressure (default Unit: bars)"
   | 0x20 == i  && 0x432 == j  = "Data Field: Reserved"
   | 0x20 == i  && 0x433 == j  = "Data Field: Relative Humidity (percent)"
   | 0x20 == i  && 0x434 == j  = "Data Field: Temperature (default Unit: degrees Celsius)"
   | 0x20 == i  && 0x435 == j  = "Data Field: Wind Direction (default Unit: degrees)"
   | 0x20 == i  && 0x436 == j  = "Data Field: Wind Speed (default Unit: meters/second)"
   | 0x20 == i  && 0x437 <= j && j <=0x43F = "Data Field: Environmental Reserved "++(showihex i)++" "++(showihex j)++""
   | 0x20 == i  && 0x440 == j  = "Property: Environmental"
   | 0x20 == i  && 0x441 == j  = "Property: Reference Pressure (default Unit: bars)"
   | 0x20 == i  && 0x442 <= j && j <=0x44F = "Property: Environmental Reserved "++(showihex i)++" "++(showihex j)++""
   | 0x20 == i  && 0x450 == j  = "Data Field: Motion"
   | 0x20 == i  && 0x451 == j  = "Data Field: Motion State"
   | 0x20 == i  && 0x452 == j  = "Data Field: Acceleration (default Unit: G’s)"
   | 0x20 == i  && 0x453 == j  = "Data Field: Acceleration Axis X (default Unit: G’s)"
   | 0x20 == i  && 0x454 == j  = "Data Field: Acceleration Axis Y (default Unit: G’s)"
   | 0x20 == i  && 0x455 == j  = "Data Field: Acceleration Axis Z (default Unit: G’s)"
   | 0x20 == i  && 0x456 == j  = "Data Field: Angular Velocity (default Unit: degrees/second)"
   | 0x20 == i  && 0x457 == j  = "Data Field: Angular Velocity about X Axis (default Unit: degrees/second)"
   | 0x20 == i  && 0x458 == j  = "Data Field: Angular Velocity about Y Axis (default Unit: degrees/second)"
   | 0x20 == i  && 0x459 == j  = "Data Field: Angular Velocity about Z Axis (default Unit: degrees/second)"
   | 0x20 == i  && 0x45A == j  = "Data Field: Angular Position (default Unit: degrees)"
   | 0x20 == i  && 0x45B == j  = "Data Field: Angular Position about X Axis (default Unit: degrees)"
   | 0x20 == i  && 0x45C == j  = "Data Field: Angular Position about Y Axis (default Unit: degrees)"
   | 0x20 == i  && 0x45D == j  = "Data Field: Angular Position about Z Axis (default Unit: degrees)"
   | 0x20 == i  && 0x45E == j  = "Data Field: Motion Speed (default Unit: meters/second)"
   | 0x20 == i  && 0x45F == j  = "Data Field: Motion Intensity (percent)"
   | 0x20 == i  && 0x460 <= j && j <=0x46F = "Data Field: Motion Reserved "++(showihex i)++" "++(showihex j)++""
   | 0x20 == i  && 0x470 == j  = "Data Field: Orientation"
   | 0x20 == i  && 0x471 == j  = "Data Field: Heading (default Unit: degrees)"
   | 0x20 == i  && 0x472 == j  = "Data Field: Heading X Axis (default Unit: degrees)"
   | 0x20 == i  && 0x473 == j  = "Data Field: Heading Y Axis (default Unit: degrees)"
   | 0x20 == i  && 0x474 == j  = "Data Field: Heading Z Axis (default Unit: degrees)"
   | 0x20 == i  && 0x475 == j  = "Data Field: Heading Compensated Magnetic North (default Unit: degrees)"
   | 0x20 == i  && 0x476 == j  = "Data Field: Heading Compensated True North (default Unit: degrees)"
   | 0x20 == i  && 0x477 == j  = "Data Field: Heading Magnetic North (default Unit: degrees)"
   | 0x20 == i  && 0x478 == j  = "Data Field: Heading True North (default Unit: degrees)"
   | 0x20 == i  && 0x479 == j  = "Data Field: Distance (default Unit: meters)"
   | 0x20 == i  && 0x47A == j  = "Data Field: Distance X Axis (default Unit: meters)"
   | 0x20 == i  && 0x47B == j  = "Data Field: Distance Y Axis (default Unit: meters)"
   | 0x20 == i  && 0x47C == j  = "Data Field: Distance Z Axis (default Unit: meters)"
   | 0x20 == i  && 0x47D == j  = "Data Field: Distance Out-of-Range"
   | 0x20 == i  && 0x47E == j  = "Data Field: Tilt (default Unit: degrees)"
   | 0x20 == i  && 0x47F == j  = "Data Field: Tilt X Axis (default Unit: degrees)"
   | 0x20 == i  && 0x480 == j  = "Data Field: Tilt Y Axis (default Unit: degrees)"
   | 0x20 == i  && 0x481 == j  = "Data Field: Tilt Z Axis (default Unit: degrees)"
   | 0x20 == i  && 0x482 == j  = "Data Field: Rotation Matrix"
   | 0x20 == i  && 0x483 == j  = "Data Field: Quaternion"
   | 0x20 == i  && 0x484 == j  = "Data Field: Magnetic Flux (default Unit: milligauss)"
   | 0x20 == i  && 0x485 == j  = "Data Field: Magnetic Flux X Axis (default Unit: milligauss)"
   | 0x20 == i  && 0x486 == j  = "Data Field: Magnetic Flux Y Axis (default Unit: milligauss)"
   | 0x20 == i  && 0x487 == j  = "Data Field: Magnetic Flux Z Axis (default Unit: milligauss)"
   | 0x20 == i  && 0x488 <= j && j <=0x48F = "Data Field: Orientation Reserved "++(showihex i)++" "++(showihex j)++""
   | 0x20 == i  && 0x490 == j  = "Data Field: Mechanical"
   | 0x20 == i  && 0x491 == j  = "Data Field: Boolean Switch State"
   | 0x20 == i  && 0x492 == j  = "Data Field: Boolean Switch Array States"
   | 0x20 == i  && 0x493 == j  = "Data Field: Multivalue Switch Value"
   | 0x20 == i  && 0x494 == j  = "Data Field: Force (default Unit: Newtons)"
   | 0x20 == i  && 0x495 == j  = "Data Field: Absolute Pressure (default Unit: Pascals)"
   | 0x20 == i  && 0x496 == j  = "Data Field: Gauge Pressure (default Unit: Pascals)"
   | 0x20 == i  && 0x497 == j  = "Data Field: Strain (percent)"
   | 0x20 == i  && 0x498 == j  = "Data Field: Weight (default Unit: kilograms)"
   | 0x20 == i  && 0x498 <= j && j <=0x49F = "Data Field: Mechanical Reserved "++(showihex i)++" "++(showihex j)++""
   | 0x20 == i  && 0x4A0 == j  = "Property: Mechanical"
   | 0x20 == i  && 0x4A1 == j  = "Property: Vibration State"
   | 0x20 == i  && 0x4A2 == j  = "Property: Forward Vibration Speed (percent)"
   | 0x20 == i  && 0x4A3 == j  = "Property: Backward Vibration Speed (percent)"
   | 0x20 == i  && 0x4A4 <= j && j <=0x4AF = "Property: Mechanical Reserved "++(showihex i)++" "++(showihex j)++""
   | 0x20 == i  && 0x4B0 == j  = "Data Field: Biometric"
   | 0x20 == i  && 0x4B1 == j  = "Data Field: Human Presence"
   | 0x20 == i  && 0x4B2 == j  = "Data Field: Human Proximity Range (default Unit: meters)"
   | 0x20 == i  && 0x4B3 == j  = "Data Field: Human Proximity Out of Range"
   | 0x20 == i  && 0x4B4 == j  = "Data Field: Human Touch State"
   | 0x20 == i  && 0x4B5 <= j && j <=0x4CF = "Data Field: Biometric Reserved "++(showihex i)++" "++(showihex j)++""
   | 0x20 == i  && 0x4D0 == j  = "Data Field: Light"
   | 0x20 == i  && 0x4D1 == j  = "Data Field: Illuminance (default Unit: Lux)"
   | 0x20 == i  && 0x4D2 == j  = "Data Field: Color Temperature (default Unit: degrees Kelvin)"
   | 0x20 == i  && 0x4D3 == j  = "Data Field: Chromaticity"
   | 0x20 == i  && 0x4D4 == j  = "Data Field: Chromaticity X (default Unit: CIE 1931 x)"
   | 0x20 == i  && 0x4D5 == j  = "Data Field: Chromaticity Y (default Unit: CIE 1931 y)"
   | 0x20 == i  && 0x4D6 == j  = "Data Field: Consumer IR Sentence Receive"
   | 0x20 == i  && 0x4D7 <= j && j <=0x4DF = "Data Field: Light Reserved "++(showihex i)++" "++(showihex j)++""
   | 0x20 == i  && 0x4F0 == j  = "Data Field: Scanner"
   | 0x20 == i  && 0x4F1 == j  = "Data Field: RFID Tag 40 Bit"
   | 0x20 == i  && 0x4F2 == j  = "Data Field: NFC Sentence Receive"
   | 0x20 == i  && 0x4F3 <= j && j <=0x4F7 = "Data Field: Scanner Reserved "++(showihex i)++" "++(showihex j)++""
   | 0x20 == i  && 0x4F8 == j  = "Property: Scanner"
   | 0x20 == i  && 0x4F9 == j  = "Property: NFC Sentence Send"
   | 0x20 == i  && 0x4FA <= j && j <=0x4FF = "Property: Scanner Reserved "++(showihex i)++" "++(showihex j)++""
   | 0x20 == i  && 0x500 == j  = "Data Field: Electrical"
   | 0x20 == i  && 0x501 == j  = "Data Field: Capacitance (default Unit: Farads)"
   | 0x20 == i  && 0x502 == j  = "Data Field: Current (default Unit: Amperes)"
   | 0x20 == i  && 0x503 == j  = "Data Field: Electrical Power (default Unit: Watts)"
   | 0x20 == i  && 0x504 == j  = "Data Field: Inductance (default Unit: Henrys)"
   | 0x20 == i  && 0x505 == j  = "Data Field: Resistance (default Unit: Ohms)"
   | 0x20 == i  && 0x506 == j  = "Data Field: Voltage (default Unit: Volts)"
   | 0x20 == i  && 0x507 == j  = "Data Field: Frequency (default Unit: Hertz)"
   | 0x20 == i  && 0x508 == j  = "Data Field: Period (default Unit: milliseconds)"
   | 0x20 == i  && 0x509 == j  = "Data Field: Percent of Range"
   | 0x20 == i  && 0x50A <= j && j <=0x51F = "Data Field: Electrical Reserved "++(showihex i)++" "++(showihex j)++""
   | 0x20 == i  && 0x520 == j  = "Data Field: Time"
   | 0x20 == i  && 0x521 == j  = "Data Field: Year"
   | 0x20 == i  && 0x522 == j  = "Data Field: Month"
   | 0x20 == i  && 0x523 == j  = "Data Field: Day"
   | 0x20 == i  && 0x524 == j  = "Data Field: Day of Week"
   | 0x20 == i  && 0x525 == j  = "Data Field: Hour"
   | 0x20 == i  && 0x526 == j  = "Data Field: Minute"
   | 0x20 == i  && 0x527 == j  = "Data Field: Second"
   | 0x20 == i  && 0x528 == j  = "Data Field: Millisecond"
   | 0x20 == i  && 0x529 == j  = "Data Field: Timestamp"
   | 0x20 == i  && 0x52A == j  = "Data Field: Julian Day of Year"
   | 0x20 == i  && 0x52A <= j && j <=0x52F = "Data Field: Time Reserved "++(showihex i)++" "++(showihex j)++""
   | 0x20 == i  && 0x540 == j  = "Data Field: Custom"
   | 0x20 == i  && 0x541 == j  = "Data Field: Custom Usage"
   | 0x20 == i  && 0x542 == j  = "Data Field: Custom Boolean Array"
   | 0x20 == i  && 0x543 == j  = "Data Field: Custom Value"
   | 0x20 == i  && 0x544 == j  = "Data Field: Custom Value 1"
   | 0x20 == i  && 0x545 == j  = "Data Field: Custom Value 2"
   | 0x20 == i  && 0x546 == j  = "Data Field: Custom Value 3"
   | 0x20 == i  && 0x547 == j  = "Data Field: Custom Value 4"
   | 0x20 == i  && 0x548 == j  = "Data Field: Custom Value 5"
   | 0x20 == i  && 0x549 == j  = "Data Field: Custom Value 6"
   | 0x20 == i  && 0x54A <= j && j <=0x55F = "Data Field: Custom Reserved"++(showihex i)++" "++(showihex j)++""
   | 0x20 == i  && 0x560 == j  = "Data Field: Generic"
   | 0x20 == i  && 0x561 == j  = "Data Field: Generic GUID or PROPERTYKEY"
   | 0x20 == i  && 0x562 == j  = "Data Field: Generic Category GUID"
   | 0x20 == i  && 0x563 == j  = "Data Field: Generic Type GUID"
   | 0x20 == i  && 0x564 == j  = "Data Field: Generic Event PROPERTYKEY"
   | 0x20 == i  && 0x565 == j  = "Data Field: Generic Property PROPERTYKEY"
   | 0x20 == i  && 0x566 == j  = "Data Field: Generic Data Field PROPERTYKEY"
   | 0x20 == i  && 0x567 == j  = "Data Field: Generic Event"
   | 0x20 == i  && 0x568 == j  = "Data Field: Generic Property"
   | 0x20 == i  && 0x569 == j  = "Data Field: Generic Data Field"
   | 0x20 == i  && 0x56A == j  = "Data Field: Enumerator Table Row Index"
   | 0x20 == i  && 0x56B == j  = "Data Field: Enumerator Table Row Count"
   | 0x20 == i  && 0x56C == j  = "Data Field: Generic GUID or PROPERTYKEY kind"
   | 0x20 == i  && 0x56D == j  = "Data Field: Generic GUID"
   | 0x20 == i  && 0x56E == j  = "Data Field: Generic PROPERTYKEY"
   | 0x20 == i  && 0x56F == j  = "Data Field: Generic Top Level Collection ID"
   | 0x20 == i  && 0x570 == j  = "Data Field: Generic Report ID"
   | 0x20 == i  && 0x571 == j  = "Data Field: Generic Report Item Position Index"
   | 0x20 == i  && 0x572 == j  = "Data Field: Generic Firmware VARTYPE"
   | 0x20 == i  && 0x573 == j  = "Data Field: Generic Unit of Measure"
   | 0x20 == i  && 0x574 == j  = "Data Field: Generic Unit Exponent"
   | 0x20 == i  && 0x575 == j  = "Data Field: Generic Report Size"
   | 0x20 == i  && 0x576 == j  = "Data Field: Generic Report Count"
   | 0x20 == i  && 0x577 <= j && j <=0x57F = "Data Field: Generic Reserved"++(showihex i)++" "++(showihex j)++""
   | 0x20 == i  && 0x580 == j  = "Property: Generic"
   | 0x20 == i  && 0x581 == j  = "Property: Enumerator Table Row Index"
   | 0x20 == i  && 0x582 == j  = "Property: Enumerator Table Row Count"
   | 0x20 == i  && 0x583 <= j && j <=0x58F = "Property: Generic Reserved "++(showihex i)++" "++(showihex j)++""
   | 0x20 == i  && 0x590 <= j && j <=0x7FF = "Reserved for future use as Data Fields and Properties"
   | 0x20 == i  && 0x800 == j  = "Sensor State: Undefined"
   | 0x20 == i  && 0x801 == j  = "Sensor State: Ready"
   | 0x20 == i  && 0x802 == j  = "Sensor State: Not Available"
   | 0x20 == i  && 0x803 == j  = "Sensor State: No Data"
   | 0x20 == i  && 0x804 == j  = "Sensor State: Initializing"
   | 0x20 == i  && 0x805 == j  = "Sensor State: Access Denied"
   | 0x20 == i  && 0x806 == j  = "Sensor State: Error"
   | 0x20 == i  && 0x810 == j  = "Sensor Event: Unknown"
   | 0x20 == i  && 0x811 == j  = "Sensor Event: State Changed"
   | 0x20 == i  && 0x812 == j  = "Sensor Event: Property Changed"
   | 0x20 == i  && 0x813 == j  = "Sensor Event: Data Updated"
   | 0x20 == i  && 0x814 == j  = "Sensor Event: Poll Response"
   | 0x20 == i  && 0x815 == j  = "Sensor Event: Change Sensitivity"
   | 0x20 == i  && 0x816 == j  = "Sensor Event: Range Maximum Reached"
   | 0x20 == i  && 0x817 == j  = "Sensor Event: Range Minimum Reached"
   | 0x20 == i  && 0x818 == j  = "Sensor Event: High Threshold Cross Upward"
   | 0x20 == i  && 0x819 == j  = "Sensor Event: High Threshold Cross Downward"
   | 0x20 == i  && 0x81A == j  = "Sensor Event: Low Threshold Cross Upward"
   | 0x20 == i  && 0x81B == j  = "Sensor Event: Low Threshold Cross Downward"
   | 0x20 == i  && 0x81C == j  = "Sensor Event: Zero Threshold Cross Upward"
   | 0x20 == i  && 0x81D == j  = "Sensor Event: Zero Threshold Cross Downward"
   | 0x20 == i  && 0x81E == j  = "Sensor Event: Period Exceeded"
   | 0x20 == i  && 0x81F == j  = "Sensor Event: Frequency Exceeded"
   | 0x20 == i  && 0x820 == j  = "Sensor Event: Complex Trigger"
   | 0x20 == i  && 0x830 == j  = "Connection Type: PC Integrated"
   | 0x20 == i  && 0x831 == j  = "Connection Type: PC Attached"
   | 0x20 == i  && 0x832 == j  = "Connection Type: PC External"
   | 0x20 == i  && 0x840 == j  = "Reporting State: Report No Events"
   | 0x20 == i  && 0x841 == j  = "Reporting State: Report All Events"
   | 0x20 == i  && 0x842 == j  = "Reporting State: Report Threshold Events"
   | 0x20 == i  && 0x843 == j  = "Reporting State: Wake On No Events"
   | 0x20 == i  && 0x844 == j  = "Reporting State: Wake On All Events"
   | 0x20 == i  && 0x845 == j  = "Reporting State: Wake On Threshold Events"
   | 0x20 == i  && 0x850 == j  = "Power State: Undefined"
   | 0x20 == i  && 0x851 == j  = "Power State: D0 Full Power"
   | 0x20 == i  && 0x852 == j  = "Power State: D1 Low Power"
   | 0x20 == i  && 0x853 == j  = "Power State: D2 Standby Power with Wakeup"
   | 0x20 == i  && 0x854 == j  = "Power State: D3 Sleep with Wakeup"
   | 0x20 == i  && 0x855 == j  = "Power State: D4 Power Off"
   | 0x20 == i  && 0x860 == j  = "Accuracy: Default"
   | 0x20 == i  && 0x861 == j  = "Accuracy: High"
   | 0x20 == i  && 0x862 == j  = "Accuracy: Medium"
   | 0x20 == i  && 0x863 == j  = "Accuracy: Low"
   | 0x20 == i  && 0x870 == j  = "Fix Quality: No Fix"
   | 0x20 == i  && 0x871 == j  = "Fix Quality: GPS"
   | 0x20 == i  && 0x872 == j  = "Fix Quality: DGPS"
   | 0x20 == i  && 0x880 == j  = "Fix Type: No Fix"
   | 0x20 == i  && 0x881 == j  = "Fix Type: GPS SPS Mode, Fix Valid"
   | 0x20 == i  && 0x882 == j  = "Fix Type: DGPS SPS Mode, Fix Valid"
   | 0x20 == i  && 0x883 == j  = "Fix Type: GPS PPS Mode, Fix Valid"
   | 0x20 == i  && 0x884 == j  = "Fix Type: Real Time Kinematic"
   | 0x20 == i  && 0x885 == j  = "Fix Type: Float RTK"
   | 0x20 == i  && 0x886 == j  = "Fix Type: Estimated (dead reckoned)"
   | 0x20 == i  && 0x887 == j  = "Fix Type: Manual Input Mode"
   | 0x20 == i  && 0x888 == j  = "Fix Type: Simulator Mode"
   | 0x20 == i  && 0x890 == j  = "GPS Operation Mode: Manual"
   | 0x20 == i  && 0x891 == j  = "GPS Operation Mode: Automatic"
   | 0x20 == i  && 0x8A0 == j  = "GPS Selection Mode: Autonomous"
   | 0x20 == i  && 0x8A1 == j  = "GPS Selection Mode: DGPS"
   | 0x20 == i  && 0x8A2 == j  = "GPS Selection Mode: Estimated (dead reckoned)"
   | 0x20 == i  && 0x8A3 == j  = "GPS Selection Mode: Manual Input"
   | 0x20 == i  && 0x8A4 == j  = "GPS Selection Mode: Simulator"
   | 0x20 == i  && 0x8A5 == j  = "GPS Selection Mode: Data Not Valid"
   | 0x20 == i  && 0x8B0 == j  = "GPS Status: Data Valid"
   | 0x20 == i  && 0x8B1 == j  = "GPS Status: Data Not Valid"
   | 0x20 == i  && 0x8C0 == j  = "Day of Week: Sunday"
   | 0x20 == i  && 0x8C1 == j  = "Day of Week: Monday"
   | 0x20 == i  && 0x8C2 == j  = "Day of Week: Tuesday"
   | 0x20 == i  && 0x8C3 == j  = "Day of Week: Wednesday"
   | 0x20 == i  && 0x8C4 == j  = "Day of Week: Thursday"
   | 0x20 == i  && 0x8C5 == j  = "Day of Week: Friday"
   | 0x20 == i  && 0x8C6 == j  = "Day of Week: Saturday"
   | 0x20 == i  && 0x8D0 == j  = "Kind: Category"
   | 0x20 == i  && 0x8D1 == j  = "Kind: Type"
   | 0x20 == i  && 0x8D2 == j  = "Kind: Event"
   | 0x20 == i  && 0x8D3 == j  = "Kind: Property"
   | 0x20 == i  && 0x8D4 == j  = "Kind: Data Field"
   | 0x20 == i  && 0x900 == j  = "VT_NULL: Empty"
   | 0x20 == i  && 0x901 == j  = "VT_BOOL: Boolean"
   | 0x20 == i  && 0x902 == j  = "VT_UI1: Byte"
   | 0x20 == i  && 0x903 == j  = "VT_I1: Character"
   | 0x20 == i  && 0x904 == j  = "VT_UI2: Unsigned Short"
   | 0x20 == i  && 0x905 == j  = "VT_I2: Short"
   | 0x20 == i  && 0x906 == j  = "VT_UI4: Unsigned Long"
   | 0x20 == i  && 0x907 == j  = "VT_I4: Long"
   | 0x20 == i  && 0x908 == j  = "VT_UI8: Unsigned Long Long"
   | 0x20 == i  && 0x909 == j  = "VT_I8: Long Long"
   | 0x20 == i  && 0x90A == j  = "VT_R4: Float"
   | 0x20 == i  && 0x90B == j  = "VT_R8: Double"
   | 0x20 == i  && 0x90C == j  = "VT_WSTR: Wide String"
   | 0x20 == i  && 0x90D == j  = "VT_STR: Narrow String"
   | 0x20 == i  && 0x90E == j  = "VT_CLSID: Guid"
   | 0x20 == i  && 0x90F == j  = "VT_VECTOR|VT_UI1: Opaque Structure"
   | 0x20 == i  && 0x910 == j  = "VT_F16E0: HID 16-bit Float with Unit Exponent 0"
   | 0x20 == i  && 0x911 == j  = "VT_F16E1: HID 16-bit Float with Unit Exponent 1"
   | 0x20 == i  && 0x912 == j  = "VT_F16E2: HID 16-bit Float with Unit Exponent 2"
   | 0x20 == i  && 0x913 == j  = "VT_F16E3: HID 16-bit Float with Unit Exponent 3"
   | 0x20 == i  && 0x914 == j  = "VT_F16E4: HID 16-bit Float with Unit Exponent 4"
   | 0x20 == i  && 0x915 == j  = "VT_F16E5: HID 16-bit Float with Unit Exponent 5"
   | 0x20 == i  && 0x916 == j  = "VT_F16E6: HID 16-bit Float with Unit Exponent 6"
   | 0x20 == i  && 0x917 == j  = "VT_F16E7: HID 16-bit Float with Unit Exponent 7"
   | 0x20 == i  && 0x918 == j  = "VT_F16E8: HID 16-bit Float with Unit Exponent 8"
   | 0x20 == i  && 0x919 == j  = "VT_F16E9: HID 16-bit Float with Unit Exponent 9"
   | 0x20 == i  && 0x91A == j  = "VT_F16EA: HID 16-bit Float with Unit Exponent A"
   | 0x20 == i  && 0x91B == j  = "VT_F16EB: HID 16-bit Float with Unit Exponent B"
   | 0x20 == i  && 0x91C == j  = "VT_F16EC: HID 16-bit Float with Unit Exponent C"
   | 0x20 == i  && 0x91D == j  = "VT_F16ED: HID 16-bit Float with Unit Exponent D"
   | 0x20 == i  && 0x91E == j  = "VT_F16EE: HID 16-bit Float with Unit Exponent E"
   | 0x20 == i  && 0x91F == j  = "VT_F16EF: HID 16-bit Float with Unit Exponent F"
   | 0x20 == i  && 0x920 == j  = "VT_F32E0: HID 32-bit Float with Unit Exponent 0"
   | 0x20 == i  && 0x921 == j  = "VT_F32E1: HID 32-bit Float with Unit Exponent 1"
   | 0x20 == i  && 0x922 == j  = "VT_F32E2: HID 32-bit Float with Unit Exponent 2"
   | 0x20 == i  && 0x923 == j  = "VT_F32E3: HID 32-bit Float with Unit Exponent 3"
   | 0x20 == i  && 0x924 == j  = "VT_F32E4: HID 32-bit Float with Unit Exponent 4"
   | 0x20 == i  && 0x925 == j  = "VT_F32E5: HID 32-bit Float with Unit Exponent 5"
   | 0x20 == i  && 0x926 == j  = "VT_F32E6: HID 32-bit Float with Unit Exponent 6"
   | 0x20 == i  && 0x927 == j  = "VT_F32E7: HID 32-bit Float with Unit Exponent 7"
   | 0x20 == i  && 0x928 == j  = "VT_F32E8: HID 32-bit Float with Unit Exponent 8"
   | 0x20 == i  && 0x929 == j  = "VT_F32E9: HID 32-bit Float with Unit Exponent 9"
   | 0x20 == i  && 0x92A == j  = "VT_F32EA: HID 32-bit Float with Unit Exponent A"
   | 0x20 == i  && 0x92B == j  = "VT_F32EB: HID 32-bit Float with Unit Exponent B"
   | 0x20 == i  && 0x92C == j  = "VT_F32EC: HID 32-bit Float with Unit Exponent C"
   | 0x20 == i  && 0x92D == j  = "VT_F32ED: HID 32-bit Float with Unit Exponent D"
   | 0x20 == i  && 0x92E == j  = "VT_F32EE: HID 32-bit Float with Unit Exponent E"
   | 0x20 == i  && 0x92F == j  = "VT_F32EF: HID 32-bit Float with Unit Exponent F"
   | 0x20 == i  && 0x940 == j  = "Unit: Not Specified"
   | 0x20 == i  && 0x941 == j  = "Unit: Lux"
   | 0x20 == i  && 0x942 == j  = "Unit: Degrees Kelvin"
   | 0x20 == i  && 0x943 == j  = "Unit: Degrees Celsius"
   | 0x20 == i  && 0x944 == j  = "Unit: Pascal"
   | 0x20 == i  && 0x945 == j  = "Unit: Newton"
   | 0x20 == i  && 0x946 == j  = "Unit: Meters/Second"
   | 0x20 == i  && 0x947 == j  = "Unit: Kilogram"
   | 0x20 == i  && 0x948 == j  = "Unit: Meter"
   | 0x20 == i  && 0x949 == j  = "Unit: Meters/Second/Second"
   | 0x20 == i  && 0x94A == j  = "Unit: Farad"
   | 0x20 == i  && 0x94B == j  = "Unit: Ampere"
   | 0x20 == i  && 0x94C == j  = "Unit: Watt"
   | 0x20 == i  && 0x94D == j  = "Unit: Henry"
   | 0x20 == i  && 0x94E == j  = "Unit: Ohm"
   | 0x20 == i  && 0x94F == j  = "Unit: Volt"
   | 0x20 == i  && 0x950 == j  = "Unit: Hertz"
   | 0x20 == i  && 0x951 == j  = "Unit: Bar"
   | 0x20 == i  && 0x952 == j  = "Unit: Degrees Anti-clockwise"
   | 0x20 == i  && 0x953 == j  = "Unit: Degrees Clockwise"
   | 0x20 == i  && 0x954 == j  = "Unit: Degrees"
   | 0x20 == i  && 0x955 == j  = "Unit: Degrees/Second"
   | 0x20 == i  && 0x956 == j  = "Unit: Degrees/Second/Second"
   | 0x20 == i  && 0x957 == j  = "Unit: Knot"
   | 0x20 == i  && 0x958 == j  = "Unit: Percent"
   | 0x20 == i  && 0x959 == j  = "Unit: Second"
   | 0x20 == i  && 0x95A == j  = "Unit: Millisecond"
   | 0x20 == i  && 0x95B == j  = "Unit: G"
   | 0x20 == i  && 0x95C == j  = "Unit: Bytes"
   | 0x20 == i  && 0x95D == j  = "Unit: Milligauss"
   | 0x20 == i  && 0x95E == j  = "Unit: Bits"
   | 0x20 == i  && 0x970 == j  = "Exponent 0: 1"
   | 0x20 == i  && 0x971 == j  = "Exponent 1: 10"
   | 0x20 == i  && 0x972 == j  = "Exponent 2: 100"
   | 0x20 == i  && 0x973 == j  = "Exponent 3: 1 000"
   | 0x20 == i  && 0x974 == j  = "Exponent 4: 10 000"
   | 0x20 == i  && 0x975 == j  = "Exponent 5: 100 000"
   | 0x20 == i  && 0x976 == j  = "Exponent 6: 1 000 000"
   | 0x20 == i  && 0x977 == j  = "Exponent 7: 10 000 000"
   | 0x20 == i  && 0x978 == j  = "Exponent 8: 0.00 000 001"
   | 0x20 == i  && 0x979 == j  = "Exponent 9: 0.0 000 001"
   | 0x20 == i  && 0x97A == j  = "Exponent A: 0.000 001"
   | 0x20 == i  && 0x97B == j  = "Exponent B: 0.00 001"
   | 0x20 == i  && 0x97C == j  = "Exponent C: 0.0 001"
   | 0x20 == i  && 0x97D == j  = "Exponent D: 0.001"
   | 0x20 == i  && 0x97E == j  = "Exponent E: 0.01"
   | 0x20 == i  && 0x97F == j  = "Exponent F: 0.1"
   | 0x20 == i  && 0x800 <= j && j <=0xFFF = "Reserved for use as Selection Values "++(showihex i)++" "++(showihex j)++""
   | 0x20 == i  && j >=0x1000 = modify (j `div` 0x1000) (toUsageName i (j `mod` 0x1000))
--  0021-003F_reserved.upg
   | 0x21 <= i && i <=0x3F && 0x00 <= j && j <=0xFFFF = "Unknown"++(showihex i)++" "++(showihex j)++""
--  0040_medical.upg
   | 0x40 == i  && 0x00 == j  = "Undefined"++(showihex i)++" "++(showihex j)++""
   | 0x40 == i  && 0x01 == j  = "Medical Ultrasound"
   | 0x40 == i  && 0x02 <= j && j <=0x1F = "Reserved"++(showihex i)++" "++(showihex j)++""
   | 0x40 == i  && 0x20 == j  = "VCR/Acquisition"
   | 0x40 == i  && 0x21 == j  = "Freeze/Thaw"
   | 0x40 == i  && 0x22 == j  = "Clip Store"
   | 0x40 == i  && 0x23 == j  = "Update"
   | 0x40 == i  && 0x24 == j  = "Next"
   | 0x40 == i  && 0x25 == j  = "Save"
   | 0x40 == i  && 0x26 == j  = "Print"
   | 0x40 == i  && 0x27 == j  = "Microphone Enable"
   | 0x40 == i  && 0x28 <= j && j <=0x3F = "Reserved"++(showihex i)++" "++(showihex j)++""
   | 0x40 == i  && 0x40 == j  = "Cine"
   | 0x40 == i  && 0x41 == j  = "Transmit Power"
   | 0x40 == i  && 0x42 == j  = "Volume"
   | 0x40 == i  && 0x43 == j  = "Focus"
   | 0x40 == i  && 0x44 == j  = "Depth"
   | 0x40 == i  && 0x45 <= j && j <=0x5F = "Reserved"++(showihex i)++" "++(showihex j)++""
   | 0x40 == i  && 0x60 == j  = "Soft Step - Primary"
   | 0x40 == i  && 0x61 == j  = "Soft Step - Secondary"
   | 0x40 == i  && 0x62 <= j && j <=0x6F = "Reserved"++(showihex i)++" "++(showihex j)++""
   | 0x40 == i  && 0x70 == j  = "Depth Gain Compensation"
   | 0x40 == i  && 0x71 <= j && j <=0x7F = "Reserved"++(showihex i)++" "++(showihex j)++""
   | 0x40 == i  && 0x80 == j  = "Zoom Select"
   | 0x40 == i  && 0x81 == j  = "Zoom Adjust"
   | 0x40 == i  && 0x82 == j  = "Spectral Doppler Mode Select"
   | 0x40 == i  && 0x83 == j  = "Spectral Doppler Adjust"
   | 0x40 == i  && 0x84 == j  = "Color Doppler Mode Select"
   | 0x40 == i  && 0x85 == j  = "Color Doppler Adjust"
   | 0x40 == i  && 0x86 == j  = "Motion Mode Select"
   | 0x40 == i  && 0x87 == j  = "Motion Mode Adjust"
   | 0x40 == i  && 0x88 == j  = "2-D Mode Select"
   | 0x40 == i  && 0x89 == j  = "2-D Mode Adjust"
   | 0x40 == i  && 0x8A <= j && j <=0x9F = "Reserved"++(showihex i)++" "++(showihex j)++""
   | 0x40 == i  && 0xA0 == j  = "Soft Control Select"
   | 0x40 == i  && 0xA1 == j  = "Soft Control Adjust"
   | 0x40 == i  && 0xA2 <= j && j <=0xFFFF = "Reserved"++(showihex i)++" "++(showihex j)++""
--  0041-007F_reserved.upg
   | 0x41 <= i && i <=0x7F && 0x00 <= j && j <=0xFFFF = "Unknown"++(showihex i)++" "++(showihex j)++""
--  0080_monitor.upg
   | 0x80 == i  && 0x00 == j  = "Undefined"++(showihex i)++""
   | 0x80 == i  && 0x01 == j  = "Monitor Control"
   | 0x80 == i  && 0x02 == j  = "EDID Information"
   | 0x80 == i  && 0x03 == j  = "VDIF Information"
   | 0x80 == i  && 0x04 == j  = "VESA Version"
   | 0x80 == i  && 0x05 == j  = "On Screen Display"
   | 0x80 == i  && 0x06 == j  = "Auto Size Center"
   | 0x80 == i  && 0x07 == j  = "Polarity Horz Synch"
   | 0x80 == i  && 0x08 == j  = "Polarity Vert Synch"
   | 0x80 == i  && 0x09 == j  = "Sync Type"
   | 0x80 == i  && 0x0A == j  = "Screen Position"
   | 0x80 == i  && 0x0B == j  = "Horizontal Frequency"
   | 0x80 == i  && 0x0C == j  = "Vertical Frequency"
   | 0x80 == i  && 0x0D <= j && j <=0xFFFF = "Reserved"++(showihex i)++" "++(showihex j)++""
--  0081_mon_enum.upg
   | 0x81 == i  && 0x00 == j  = "unassigned"++(showihex i)++""
   | 0x81 == i  && 0x01 <= j && j <=0xFFFF = "ENUM "++(showihex j)++""
--  0082_VESAVC.upg
   | 0x82 == i  && 0x00 <= j && j <=0x0F = "Reserved"++(showihex i)++" "++(showihex j)++""
   | 0x82 == i  && 0x10 == j  = "Brightness"
   | 0x82 == i  && 0x12 == j  = "Contrast"
   | 0x82 == i  && 0x16 == j  = "Video Gain Red"
   | 0x82 == i  && 0x18 == j  = "Video Gain Green"
   | 0x82 == i  && 0x1A == j  = "Video Gain Blue"
   | 0x82 == i  && 0x1C == j  = "Focus"
   | 0x82 == i  && 0x20 == j  = "Horizontal Position"
   | 0x82 == i  && 0x22 == j  = "Horizontal Size"
   | 0x82 == i  && 0x24 == j  = "Horizontal Pincushion"
   | 0x82 == i  && 0x26 == j  = "Horizontal Pincushion Balance"
   | 0x82 == i  && 0x28 == j  = "Horizontal Misconvergence"
   | 0x82 == i  && 0x2A == j  = "Horizontal Linearity"
   | 0x82 == i  && 0x2C == j  = "Horizontal Linearity Balance"
   | 0x82 == i  && 0x30 == j  = "Vertical Position"
   | 0x82 == i  && 0x32 == j  = "Vertical Size"
   | 0x82 == i  && 0x34 == j  = "Vertical Pincushion"
   | 0x82 == i  && 0x36 == j  = "Vertical Pincushion Balance"
   | 0x82 == i  && 0x38 == j  = "Vertical Misconvergence"
   | 0x82 == i  && 0x3A == j  = "Vertical Linearity"
   | 0x82 == i  && 0x3C == j  = "Vertical Linearity Balance"
   | 0x82 == i  && 0x40 == j  = "Parallelogram Distortion"
   | 0x82 == i  && 0x42 == j  = "Trapezoidal Distortion"
   | 0x82 == i  && 0x44 == j  = "Tilt"
   | 0x82 == i  && 0x46 == j  = "Top Corner Distortion Control"
   | 0x82 == i  && 0x48 == j  = "Top Corner Distortion Balance"
   | 0x82 == i  && 0x4A == j  = "Bottom Corner Distortion Control"
   | 0x82 == i  && 0x4C == j  = "Bottom Corner Distortion Balance"
   | 0x82 == i  && 0x56 == j  = "Moire Horizontal"
   | 0x82 == i  && 0x58 == j  = "Moire Vertical"
   | 0x82 == i  && 0x5E == j  = "Input Level Select"
   | 0x82 == i  && 0x60 == j  = "Input Source Select"
   | 0x82 == i  && 0x62 == j  = "Stereo Mode"
   | 0x82 == i  && 0x6C == j  = "Video Black Level Red"
   | 0x82 == i  && 0x6E == j  = "Video Black Level Green"
   | 0x82 == i  && 0x70 == j  = "Video Black Level Blue"
   | 0x82 == i  && 0x71 <= j && j <=0xFFFF = "Reserved"++(showihex i)++" "++(showihex j)++""
--  0083_VESACmnd.upg
   | 0x83 == i  && 0x00 == j  = "Undefined"++(showihex i)++""
   | 0x83 == i  && 0x01 == j  = "Settings"
   | 0x83 == i  && 0x02 == j  = "Degauss"
   | 0x83 == i  && 0x03 <= j && j <=0xFFFF = "Reserved"++(showihex i)++" "++(showihex j)++""
--  0084_PwrDev.upg
   | 0x84 == i  && 0x00 == j  = "Undefined"++(showihex i)++" "++(showihex j)++""
   | 0x84 == i  && 0x01 == j  = "iName"
   | 0x84 == i  && 0x02 == j  = "PresentStatus"
   | 0x84 == i  && 0x03 == j  = "ChangedStatus"
   | 0x84 == i  && 0x04 == j  = "UPS"
   | 0x84 == i  && 0x05 == j  = "PowerSupply"
   | 0x84 == i  && 0x06 <= j && j <=0x0F = "Reserved"++(showihex i)++" "++(showihex j)++""
   | 0x84 == i  && 0x10 == j  = "BatterySystem"
   | 0x84 == i  && 0x11 == j  = "BatterySystemID"
   | 0x84 == i  && 0x12 == j  = "Battery"
   | 0x84 == i  && 0x13 == j  = "BatteryID"
   | 0x84 == i  && 0x14 == j  = "Charger"
   | 0x84 == i  && 0x15 == j  = "ChargerID"
   | 0x84 == i  && 0x16 == j  = "PowerConverter"
   | 0x84 == i  && 0x17 == j  = "PowerConverterID"
   | 0x84 == i  && 0x18 == j  = "OutletSystem"
   | 0x84 == i  && 0x19 == j  = "OutletSystemID"
   | 0x84 == i  && 0x1A == j  = "Input"
   | 0x84 == i  && 0x1B == j  = "InputID"
   | 0x84 == i  && 0x1C == j  = "Output"
   | 0x84 == i  && 0x1D == j  = "OutputID"
   | 0x84 == i  && 0x1E == j  = "Flow"
   | 0x84 == i  && 0x1F == j  = "FlowID"
   | 0x84 == i  && 0x20 == j  = "Outlet"
   | 0x84 == i  && 0x21 == j  = "OutletID"
   | 0x84 == i  && 0x22 == j  = "Gang"
   | 0x84 == i  && 0x23 == j  = "GangID"
   | 0x84 == i  && 0x24 == j  = "PowerSummary"
   | 0x84 == i  && 0x25 == j  = "PowerSummaryID"
   | 0x84 == i  && 0x26 <= j && j <=0x2F = "Reserved"++(showihex i)++" "++(showihex j)++""
   | 0x84 == i  && 0x30 == j  = "Voltage"
   | 0x84 == i  && 0x31 == j  = "Current"
   | 0x84 == i  && 0x32 == j  = "Frequency"
   | 0x84 == i  && 0x33 == j  = "ApparentPower"
   | 0x84 == i  && 0x34 == j  = "ActivePower"
   | 0x84 == i  && 0x35 == j  = "PercentLoad"
   | 0x84 == i  && 0x36 == j  = "Temperature"
   | 0x84 == i  && 0x37 == j  = "Humidity"
   | 0x84 == i  && 0x38 == j  = "BadCount"
   | 0x84 == i  && 0x39 <= j && j <=0x3F = "Reserved"++(showihex i)++" "++(showihex j)++""
   | 0x84 == i  && 0x40 == j  = "ConfigVoltage"
   | 0x84 == i  && 0x41 == j  = "ConfigCurrent"
   | 0x84 == i  && 0x42 == j  = "ConfigFrequency"
   | 0x84 == i  && 0x43 == j  = "ConfigApparentPower"
   | 0x84 == i  && 0x44 == j  = "ConfigActivePower"
   | 0x84 == i  && 0x45 == j  = "ConfigPercentLoad"
   | 0x84 == i  && 0x46 == j  = "ConfigTemperature"
   | 0x84 == i  && 0x47 == j  = "ConfigHumidity"
   | 0x84 == i  && 0x48 <= j && j <=0x4F = "Reserved"++(showihex i)++" "++(showihex j)++""
   | 0x84 == i  && 0x50 == j  = "SwitchOnControl"
   | 0x84 == i  && 0x51 == j  = "SwitchOffControl"
   | 0x84 == i  && 0x52 == j  = "ToggleControl"
   | 0x84 == i  && 0x53 == j  = "LowVoltageTransfer"
   | 0x84 == i  && 0x54 == j  = "HighVoltageTransfer"
   | 0x84 == i  && 0x55 == j  = "DelayBeforeReboot"
   | 0x84 == i  && 0x56 == j  = "DelayBeforeStartup"
   | 0x84 == i  && 0x57 == j  = "DelayBeforeShutdown"
   | 0x84 == i  && 0x58 == j  = "Test"
   | 0x84 == i  && 0x59 == j  = "ModuleReset"
   | 0x84 == i  && 0x5A == j  = "AudibleAlarmControl"
   | 0x84 == i  && 0x5B <= j && j <=0x5F = "Reserved"++(showihex i)++" "++(showihex j)++""
   | 0x84 == i  && 0x60 == j  = "Present"
   | 0x84 == i  && 0x61 == j  = "Good"
   | 0x84 == i  && 0x62 == j  = "InternalFailure"
   | 0x84 == i  && 0x63 == j  = "VoltageOutOfRange"
   | 0x84 == i  && 0x64 == j  = "FrequencyOutOfRange"
   | 0x84 == i  && 0x65 == j  = "Overload"
   | 0x84 == i  && 0x66 == j  = "OverCharged"
   | 0x84 == i  && 0x67 == j  = "OverTemperature"
   | 0x84 == i  && 0x68 == j  = "ShutdownRequested"
   | 0x84 == i  && 0x69 == j  = "ShutdownImminent"
   | 0x84 == i  && 0x6A == j  = "Reserved"
   | 0x84 == i  && 0x6B == j  = "SwitchOn/Off"
   | 0x84 == i  && 0x6C == j  = "Switchable"
   | 0x84 == i  && 0x6D == j  = "Used"
   | 0x84 == i  && 0x6E == j  = "Boost"
   | 0x84 == i  && 0x6F == j  = "Buck"
   | 0x84 == i  && 0x70 == j  = "Initialized"
   | 0x84 == i  && 0x71 == j  = "Tested"
   | 0x84 == i  && 0x72 == j  = "AwaitingPower"
   | 0x84 == i  && 0x73 == j  = "CommunicationLost"
   | 0x84 == i  && 0x74 <= j && j <=0xFC = "Reserved"++(showihex i)++" "++(showihex j)++""
   | 0x84 == i  && 0xFD == j  = "iManufacturer"
   | 0x84 == i  && 0xFE == j  = "iProduct"
   | 0x84 == i  && 0xFF == j  = "iserialNumber"
   | 0x84 == i  && 0x100 <= j && j <=0xFFFF = "Reserved"++(showihex i)++" "++(showihex j)++""
--  0085_BatSys.upg
   | 0x85 == i  && 0x00 == j  = "Undefined"++(showihex i)++" "++(showihex j)++""
   | 0x85 == i  && 0x01 == j  = "SMBBatteryMode"
   | 0x85 == i  && 0x02 == j  = "SMBBatteryStatus"
   | 0x85 == i  && 0x03 == j  = "SMBAlarmWarning"
   | 0x85 == i  && 0x04 == j  = "SMBChargerMode"
   | 0x85 == i  && 0x05 == j  = "SMBChargerStatus"
   | 0x85 == i  && 0x06 == j  = "SMBChargerSpecInfo"
   | 0x85 == i  && 0x07 == j  = "SMBSelectorState"
   | 0x85 == i  && 0x08 == j  = "SMBSelectorPresets"
   | 0x85 == i  && 0x09 == j  = "SMBSelectorInfo"
   | 0x85 == i  && 0x0A <= j && j <=0x0F = "Reserved"++(showihex i)++" "++(showihex j)++""
   | 0x85 == i  && 0x10 == j  = "OptionalMfgFunction1"
   | 0x85 == i  && 0x11 == j  = "OptionalMfgFunction2"
   | 0x85 == i  && 0x12 == j  = "OptionalMfgFunction3"
   | 0x85 == i  && 0x13 == j  = "OptionalMfgFunction4"
   | 0x85 == i  && 0x14 == j  = "OptionalMfgFunction5"
   | 0x85 == i  && 0x15 == j  = "ConnectionToSMBus"
   | 0x85 == i  && 0x16 == j  = "OutputConnection"
   | 0x85 == i  && 0x17 == j  = "ChargerConnection"
   | 0x85 == i  && 0x18 == j  = "BatteryInsertion"
   | 0x85 == i  && 0x19 == j  = "Usenext"
   | 0x85 == i  && 0x1A == j  = "OKToUse"
   | 0x85 == i  && 0x1B == j  = "BatterySupported"
   | 0x85 == i  && 0x1C == j  = "SelectorRevision"
   | 0x85 == i  && 0x1D == j  = "ChargingIndicator"
   | 0x85 == i  && 0x1E <= j && j <=0x27 = "Reserved"++(showihex i)++" "++(showihex j)++""
   | 0x85 == i  && 0x28 == j  = "ManufacturerAccess"
   | 0x85 == i  && 0x29 == j  = "RemainingCapacityLimit"
   | 0x85 == i  && 0x2A == j  = "RemainingTimeLimit"
   | 0x85 == i  && 0x2B == j  = "AtRate"
   | 0x85 == i  && 0x2C == j  = "CapacityMode"
   | 0x85 == i  && 0x2D == j  = "BroadcastToCharger"
   | 0x85 == i  && 0x2E == j  = "PrimaryBattery"
   | 0x85 == i  && 0x2F == j  = "ChargeController"
   | 0x85 == i  && 0x30 <= j && j <=0x3F = "Reserved"++(showihex i)++" "++(showihex j)++""
   | 0x85 == i  && 0x40 == j  = "TerminateCharge"
   | 0x85 == i  && 0x41 == j  = "TerminateDischarge"
   | 0x85 == i  && 0x42 == j  = "BelowRemainingCapacityLimit"
   | 0x85 == i  && 0x43 == j  = "RemainingTimeLimitExpired"
   | 0x85 == i  && 0x44 == j  = "Charging"
   | 0x85 == i  && 0x45 == j  = "Discharging"
   | 0x85 == i  && 0x46 == j  = "FullyCharged"
   | 0x85 == i  && 0x47 == j  = "FullyDischarged"
   | 0x85 == i  && 0x48 == j  = "ConditioningFlag"
   | 0x85 == i  && 0x49 == j  = "AtRateOK"
   | 0x85 == i  && 0x4A == j  = "SMBErrorCode"
   | 0x85 == i  && 0x4B == j  = "NeedReplacement"
   | 0x85 == i  && 0x4C <= j && j <=0x5F = "Reserved"++(showihex i)++" "++(showihex j)++""
   | 0x85 == i  && 0x60 == j  = "AtRateTimeToFull"
   | 0x85 == i  && 0x61 == j  = "AtRateTimeToEmpty"
   | 0x85 == i  && 0x62 == j  = "AverageCurrent"
   | 0x85 == i  && 0x63 == j  = "Maxerror"
   | 0x85 == i  && 0x64 == j  = "RelativeStateOfCharge"
   | 0x85 == i  && 0x65 == j  = "AbsoluteStateOfCharge"
   | 0x85 == i  && 0x66 == j  = "RemainingCapacity"
   | 0x85 == i  && 0x67 == j  = "FullChargeCapacity"
   | 0x85 == i  && 0x68 == j  = "RunTimeToEmpty"
   | 0x85 == i  && 0x69 == j  = "AverageTimeToEmpty"
   | 0x85 == i  && 0x6A == j  = "AverageTimeToFull"
   | 0x85 == i  && 0x6B == j  = "CycleCount"
   | 0x85 == i  && 0x6C <= j && j <=0x7F = "Reserved"++(showihex i)++" "++(showihex j)++""
   | 0x85 == i  && 0x80 == j  = "BattPackModelLevel"
   | 0x85 == i  && 0x81 == j  = "InternalChargeController"
   | 0x85 == i  && 0x82 == j  = "PrimaryBatterySupport"
   | 0x85 == i  && 0x83 == j  = "DesignCapacity"
   | 0x85 == i  && 0x84 == j  = "SpecificationInfo"
   | 0x85 == i  && 0x85 == j  = "ManufacturerDate"
   | 0x85 == i  && 0x86 == j  = "SerialNumber"
   | 0x85 == i  && 0x87 == j  = "iManufacturerName"
   | 0x85 == i  && 0x88 == j  = "iDevicename"
   | 0x85 == i  && 0x89 == j  = "iDeviceChemistery"
   | 0x85 == i  && 0x8A == j  = "ManufacturerData"
   | 0x85 == i  && 0x8B == j  = "Rechargable"
   | 0x85 == i  && 0x8C == j  = "WarningCapacityLimit"
   | 0x85 == i  && 0x8D == j  = "CapacityGranularity1"
   | 0x85 == i  && 0x8E == j  = "CapacityGranularity2"
   | 0x85 == i  && 0x8F == j  = "iOEMInformation"
   | 0x85 == i  && 0x90 <= j && j <=0xBF = "Reserved"++(showihex i)++" "++(showihex j)++""
   | 0x85 == i  && 0xC0 == j  = "InhibitCharge"
   | 0x85 == i  && 0xC1 == j  = "EnablePolling"
   | 0x85 == i  && 0xC2 == j  = "ResetToZero"
   | 0x85 == i  && 0xC3 <= j && j <=0xCF = "Reserved"++(showihex i)++" "++(showihex j)++""
   | 0x85 == i  && 0xD0 == j  = "ACPresent"
   | 0x85 == i  && 0xD1 == j  = "BatteryPresent"
   | 0x85 == i  && 0xD2 == j  = "PowerFail"
   | 0x85 == i  && 0xD3 == j  = "AlarmInhibited"
   | 0x85 == i  && 0xD4 == j  = "ThermistorUnderRange"
   | 0x85 == i  && 0xD5 == j  = "ThermistorHot"
   | 0x85 == i  && 0xD6 == j  = "ThermistorCold"
   | 0x85 == i  && 0xD7 == j  = "ThermistorOverRange"
   | 0x85 == i  && 0xD8 == j  = "VoltageOutOfRange"
   | 0x85 == i  && 0xD9 == j  = "CurrentOutOfRange"
   | 0x85 == i  && 0xDA == j  = "CurrentNotRegulated"
   | 0x85 == i  && 0xDB == j  = "VoltageNotRegulated"
   | 0x85 == i  && 0xDC == j  = "MasterMode"
   | 0x85 == i  && 0xDD <= j && j <=0xEF = "Reserved"++(showihex i)++" "++(showihex j)++""
   | 0x85 == i  && 0xF0 == j  = "ChargerSelectorSupport"
   | 0x85 == i  && 0xF1 == j  = "ChargerSpec"
   | 0x85 == i  && 0xF2 == j  = "Level2"
   | 0x85 == i  && 0xF3 == j  = "Level3"
   | 0x85 == i  && 0xF2 <= j && j <=0xFFFF = "Reserved"++(showihex i)++" "++(showihex j)++""
--  0086-0087_power.upg
   | 0x86 <= i && i <=0x87 && 0x00 <= j && j <=0xFFFF = "Unknown"++(showihex i)++" "++(showihex j)++""
--  0088-008B_reserved.upg
   | 0x88 <= i && i <=0x8B && 0x00 <= j && j <=0xFFFF = "Unknown"++(showihex i)++" "++(showihex j)++""
--  008C_barcode.upg
   | 0x8C == i  && 0x00 == j  = "Undefined"++(showihex i)++" "++(showihex j)++""
   | 0x8C == i  && 0x01 == j  = "Bar Code Badge Reader"
   | 0x8C == i  && 0x02 == j  = "Bar Code Scanner"
   | 0x8C == i  && 0x03 == j  = "Dumb Bar Code Scanner"
   | 0x8C == i  && 0x04 == j  = "Cordless Scanner Base"
   | 0x8C == i  && 0x05 == j  = "Bar Code Scanner Cradle"
   | 0x8C == i  && 0x06 <= j && j <=0x0F = "Reserved"++(showihex i)++" "++(showihex j)++""
   | 0x8C == i  && 0x10 == j  = "Attribute Report"
   | 0x8C == i  && 0x11 == j  = "Settings Report"
   | 0x8C == i  && 0x12 == j  = "Scanned Data Report"
   | 0x8C == i  && 0x13 == j  = "Raw Scanned Data Report"
   | 0x8C == i  && 0x14 == j  = "Trigger Report"
   | 0x8C == i  && 0x15 == j  = "Status Report"
   | 0x8C == i  && 0x16 == j  = "UPC/EAN Control Report"
   | 0x8C == i  && 0x17 == j  = "EAN 2/3 Label Control Report"
   | 0x8C == i  && 0x18 == j  = "Code 39 Control Report"
   | 0x8C == i  && 0x19 == j  = "Interleaved 2 of 5 Control Report"
   | 0x8C == i  && 0x1A == j  = "Standard 2 of 5 Control Report"
   | 0x8C == i  && 0x1B == j  = "MSI Plessey Control Report"
   | 0x8C == i  && 0x1C == j  = "Codabar Control Report"
   | 0x8C == i  && 0x1D == j  = "Code 128 Control Report"
   | 0x8C == i  && 0x1E == j  = "Misc 1D Control Report"
   | 0x8C == i  && 0x1F == j  = "2D Control Report"
   | 0x8C == i  && 0x20 <= j && j <=0x2F = "Reserved"
   | 0x8C == i  && 0x30 == j  = "Aiming/Pointer Mode"
   | 0x8C == i  && 0x31 == j  = "Bar Code Present Sensor"
   | 0x8C == i  && 0x32 == j  = "Class 1A Laser"
   | 0x8C == i  && 0x33 == j  = "Class 2 Laser"
   | 0x8C == i  && 0x34 == j  = "Heater Present"
   | 0x8C == i  && 0x35 == j  = "Contact Scanner"
   | 0x8C == i  && 0x36 == j  = "Electronic Article Surveillance Notification"
   | 0x8C == i  && 0x37 == j  = "Constant Electronic Article Surveillance"
   | 0x8C == i  && 0x38 == j  = "Error Indication"
   | 0x8C == i  && 0x39 == j  = "Fixed Beeper"
   | 0x8C == i  && 0x3A == j  = "Good Decode Indication"
   | 0x8C == i  && 0x3B == j  = "Hands Free Scanning"
   | 0x8C == i  && 0x3C == j  = "Intrinsically Safe"
   | 0x8C == i  && 0x3D == j  = "Klasse Eins Laser"
   | 0x8C == i  && 0x3E == j  = "Long Range Scanner"
   | 0x8C == i  && 0x3F == j  = "Mirror Speed Control"
   | 0x8C == i  && 0x40 == j  = "Not On File Indication"
   | 0x8C == i  && 0x41 == j  = "Programmable Beeper"
   | 0x8C == i  && 0x42 == j  = "Triggerless"
   | 0x8C == i  && 0x43 == j  = "Wand"
   | 0x8C == i  && 0x44 == j  = "Water Resistant"
   | 0x8C == i  && 0x45 == j  = "Multi-Range Scanner"
   | 0x8C == i  && 0x46 == j  = "Proximity Sensor"
   | 0x8C == i  && 0x47 <= j && j <=0x4C = "Reserved"++(showihex i)++" "++(showihex j)++""
   | 0x8C == i  && 0x4D == j  = "Fragment Decoding"
   | 0x8C == i  && 0x4E == j  = "Scanner Read Confidence"
   | 0x8C == i  && 0x4F == j  = "Data Prefix"
   | 0x8C == i  && 0x50 == j  = "Prefix AIMI"
   | 0x8C == i  && 0x51 == j  = "Prefix None"
   | 0x8C == i  && 0x52 == j  = "Prefix Proprietary"
   | 0x8C == i  && 0x53 <= j && j <=0x54 = "Reserved"++(showihex i)++" "++(showihex j)++""
   | 0x8C == i  && 0x55 == j  = "Active Time"
   | 0x8C == i  && 0x56 == j  = "Aiming Laser Pattern"
   | 0x8C == i  && 0x57 == j  = "Bar Code Present"
   | 0x8C == i  && 0x58 == j  = "Beeper State"
   | 0x8C == i  && 0x59 == j  = "Laser On Time"
   | 0x8C == i  && 0x5A == j  = "Laser State"
   | 0x8C == i  && 0x5B == j  = "Lockout Time"
   | 0x8C == i  && 0x5C == j  = "Motor State"
   | 0x8C == i  && 0x5D == j  = "Motor Timeout"
   | 0x8C == i  && 0x5E == j  = "Power On Reset Scanner"
   | 0x8C == i  && 0x5F == j  = "Prevent Read of Barcodes"
   | 0x8C == i  && 0x60 == j  = "Initiate Barcode Read"
   | 0x8C == i  && 0x61 == j  = "Trigger State"
   | 0x8C == i  && 0x62 == j  = "Trigger Mode"
   | 0x8C == i  && 0x63 == j  = "Trigger Mode Blinking Laser On"
   | 0x8C == i  && 0x64 == j  = "Trigger Mode Continuous Laser On"
   | 0x8C == i  && 0x65 == j  = "Trigger Mode Laser on while Pulled"
   | 0x8C == i  && 0x66 == j  = "Trigger Mode Laser stays on after Trigger release"
   | 0x8C == i  && 0x67 <= j && j <=0x6C = "Reserved"
   | 0x8C == i  && 0x6D == j  = "Commit Parameters to NVM"
   | 0x8C == i  && 0x6E == j  = "Parameter Scanning"
   | 0x8C == i  && 0x6F == j  = "Parameters Changed"
   | 0x8C == i  && 0x70 == j  = "Set parameter default values"
   | 0x8C == i  && 0x71 <= j && j <=0x74 = "Reserved"
   | 0x8C == i  && 0x75 == j  = "Scanner In Cradle"
   | 0x8C == i  && 0x76 == j  = "Scanner In Range"
   | 0x8C == i  && 0x77 <= j && j <=0x79 = "Reserved"
   | 0x8C == i  && 0x7A == j  = "Aim Duration"
   | 0x8C == i  && 0x7B == j  = "Good Read Lamp Duration"
   | 0x8C == i  && 0x7C == j  = "Good Read Lamp Intensity"
   | 0x8C == i  && 0x7D == j  = "Good Read LED"
   | 0x8C == i  && 0x7E == j  = "Good Read Tone Frequency"
   | 0x8C == i  && 0x7F == j  = "Good Read Tone Length"
   | 0x8C == i  && 0x80 == j  = "Good Read Tone Volume"
   | 0x8C == i  && 0x81 == j  = "Reserved"
   | 0x8C == i  && 0x82 == j  = "No Read Message"
   | 0x8C == i  && 0x83 == j  = "Not on File Volume"
   | 0x8C == i  && 0x84 == j  = "Powerup Beep"
   | 0x8C == i  && 0x85 == j  = "Sound Error Beep"
   | 0x8C == i  && 0x86 == j  = "Sound Good Read Beep"
   | 0x8C == i  && 0x87 == j  = "Sound Not On File Beep"
   | 0x8C == i  && 0x88 == j  = "Good Read When to Write"
   | 0x8C == i  && 0x89 == j  = "GRWTI After Decode"
   | 0x8C == i  && 0x8A == j  = "GRWTI Beep/Lamp after transmit"
   | 0x8C == i  && 0x8B == j  = "GRWTI No Beep/Lamp use at all"
   | 0x8C == i  && 0x8C <= j && j <=0x90 = "Reserved"
   | 0x8C == i  && 0x91 == j  = "Bookland EAN"
   | 0x8C == i  && 0x92 == j  = "Convert EAN 8 to 13 Type"
   | 0x8C == i  && 0x93 == j  = "Convert UPC A to EAN-13"
   | 0x8C == i  && 0x94 == j  = "Convert UPC-E to A"
   | 0x8C == i  && 0x95 == j  = "EAN-13"
   | 0x8C == i  && 0x96 == j  = "EAN-8"
   | 0x8C == i  && 0x97 == j  = "EAN-99 128_Mandatory"
   | 0x8C == i  && 0x98 == j  = "EAN-99 P5/128_Optional"
   | 0x8C == i  && 0x99 == j  = "Reserved"++(showihex i)++" "++(showihex j)++""
   | 0x8C == i  && 0x9A == j  = "UPC/EAN"
   | 0x8C == i  && 0x9B == j  = "UPC/EAN Coupon Code"
   | 0x8C == i  && 0x9C == j  = "UPC/EAN Periodicals"
   | 0x8C == i  && 0x9D == j  = "UPC-A"
   | 0x8C == i  && 0x9E == j  = "UPC-A with 128 Mandatory"
   | 0x8C == i  && 0x9F == j  = "UPC-A with 128 Optional"
   | 0x8C == i  && 0xA0 == j  = "UPC-A with P5 Optional"
   | 0x8C == i  && 0xA1 == j  = "UPC-E"
   | 0x8C == i  && 0xA2 == j  = "UPC-E1"
   | 0x8C == i  && 0xA3 <= j && j <=0xA8 = "Reserved"++(showihex i)++" "++(showihex j)++""
   | 0x8C == i  && 0xA9 == j  = "Periodical"
   | 0x8C == i  && 0xAA == j  = "Periodical Auto-Discriminate + 2"
   | 0x8C == i  && 0xAB == j  = "Periodical Only Decode with + 2"
   | 0x8C == i  && 0xAC == j  = "Periodical Ignore + 2"
   | 0x8C == i  && 0xAD == j  = "Periodical Auto-Discriminate + 5"
   | 0x8C == i  && 0xAE == j  = "Periodical Only Decode with + 5"
   | 0x8C == i  && 0xAF == j  = "Periodical Ignore + 5"
   | 0x8C == i  && 0xB0 == j  = "Check"
   | 0x8C == i  && 0xB1 == j  = "Check Disable Price"
   | 0x8C == i  && 0xB2 == j  = "Check Enable 4 digit Price"
   | 0x8C == i  && 0xB3 == j  = "Check Enable 5 digit Price"
   | 0x8C == i  && 0xB4 == j  = "Check Enable European 4 digit Price"
   | 0x8C == i  && 0xB5 == j  = "Check Enable European 5 digit Price"
   | 0x8C == i  && 0xB6 == j  = "Reserved"++(showihex i)++" "++(showihex j)++""
   | 0x8C == i  && 0xB7 == j  = "EAN Two Label"
   | 0x8C == i  && 0xB8 == j  = "EAN Three Label"
   | 0x8C == i  && 0xB9 == j  = "EAN 8 Flag Digit 1"
   | 0x8C == i  && 0xBA == j  = "EAN 8 Flag Digit 2"
   | 0x8C == i  && 0xBB == j  = "EAN 8 Flag Digit 3"
   | 0x8C == i  && 0xBC == j  = "EAN 13 Flag Digit 1"
   | 0x8C == i  && 0xBD == j  = "EAN 13 Flag Digit 2"
   | 0x8C == i  && 0xBE == j  = "EAN 13 Flag Digit 3"
   | 0x8C == i  && 0xBF == j  = "Add EAN 2/3 Label Definition"
   | 0x8C == i  && 0xC0 == j  = "Clear all EAN 2/3 Label Definitions"
   | 0x8C == i  && 0xC1 <= j && j <=0xC2 = "Reserved"++(showihex i)++" "++(showihex j)++""
   | 0x8C == i  && 0xC3 == j  = "Codabar"
   | 0x8C == i  && 0xC4 == j  = "Code 128"
   | 0x8C == i  && 0xC5 <= j && j <=0xC6 = "Reserved"++(showihex i)++" "++(showihex j)++""
   | 0x8C == i  && 0xC7 == j  = "Code 39"
   | 0x8C == i  && 0xC8 == j  = "Code 93"
   | 0x8C == i  && 0xC9 == j  = "Full ASCII Conversion"
   | 0x8C == i  && 0xCA == j  = "Interleaved 2 of 5"
   | 0x8C == i  && 0xCB == j  = "Italian Pharmacy Code"
   | 0x8C == i  && 0xCC == j  = "MSI/Plessey"
   | 0x8C == i  && 0xCD == j  = "Standard 2 of 5 IATA"
   | 0x8C == i  && 0xCE == j  = "Standard 2 of 5"
   | 0x8C == i  && 0xCF <= j && j <=0xD2 = "Reserved"++(showihex i)++" "++(showihex j)++""
   | 0x8C == i  && 0xD3 == j  = "Transmit Start/Stop"
   | 0x8C == i  && 0xD4 == j  = "Tri-Optic"
   | 0x8C == i  && 0xD5 == j  = "UCC/EAN-128"
   | 0x8C == i  && 0xD6 == j  = "Check Digit"
   | 0x8C == i  && 0xD7 == j  = "Check Digit Disable"
   | 0x8C == i  && 0xD8 == j  = "Check Digit Enable Interleaved 2 of 5 OPCC"
   | 0x8C == i  && 0xD9 == j  = "Check Digit Enable Interleaved 2 of 5 USS"
   | 0x8C == i  && 0xDA == j  = "Check Digit Enable Standard 2 of 5 OPCC"
   | 0x8C == i  && 0xDB == j  = "Check Digit Enable Standard 2 of 5 USS"
   | 0x8C == i  && 0xDC == j  = "Check Digit Enable One MSI Plessey"
   | 0x8C == i  && 0xDD == j  = "Check Digit Enable Two MSI Plessey"
   | 0x8C == i  && 0xDE == j  = "Check Digit Codabar Enable"
   | 0x8C == i  && 0xDF == j  = "Check Digit Code 39 Enable"
   | 0x8C == i  && 0xE0 <= j && j <=0xEF = "Reserved"++(showihex i)++" "++(showihex j)++""
   | 0x8C == i  && 0xF0 == j  = "Transmit Check Digit"
   | 0x8C == i  && 0xF1 == j  = "Disable Check Digit Transmit"
   | 0x8C == i  && 0xF2 == j  = "Enable Check Digit Transmit"
   | 0x8C == i  && 0xF3 <= j && j <=0xFA = "Reserved"++(showihex i)++" "++(showihex j)++""
   | 0x8C == i  && 0xFB == j  = "Symbology Identifier 1"
   | 0x8C == i  && 0xFC == j  = "Symbology Identifier 2"
   | 0x8C == i  && 0xFD == j  = "Symbology Identifier 3"
   | 0x8C == i  && 0xFE == j  = "Decoded Data"
   | 0x8C == i  && 0xFF == j  = "Decode Data Continued"
   | 0x8C == i  && 0x100 == j  = "Bar Space Data"
   | 0x8C == i  && 0x101 == j  = "Scanner Data Accuracy"
   | 0x8C == i  && 0x102 == j  = "Raw Data Polarity"
   | 0x8C == i  && 0x103 == j  = "Polarity Inverted Bar Code"
   | 0x8C == i  && 0x104 == j  = "Polarity Normal Bar Code"
   | 0x8C == i  && 0x105 == j  = "Reserved"++(showihex i)++" "++(showihex j)++""
   | 0x8C == i  && 0x106 == j  = "Minimum Length to Decode"
   | 0x8C == i  && 0x107 == j  = "Maximum Length to Decode"
   | 0x8C == i  && 0x108 == j  = "First Discrete Length to Decode"
   | 0x8C == i  && 0x109 == j  = "Second Discrete Length to Decode"
   | 0x8C == i  && 0x10A == j  = "Data Length Method"
   | 0x8C == i  && 0x10B == j  = "DL Method Read any"
   | 0x8C == i  && 0x10C == j  = "DL Method Check in Range"
   | 0x8C == i  && 0x10D == j  = "DL Method Check for Discrete"
   | 0x8C == i  && 0x10E <= j && j <=0x10F = "Reserved"++(showihex i)++" "++(showihex j)++""
   | 0x8C == i  && 0x110 == j  = "Aztec Code"
   | 0x8C == i  && 0x111 == j  = "BC412"
   | 0x8C == i  && 0x112 == j  = "Channel Code"
   | 0x8C == i  && 0x113 == j  = "Code 16"
   | 0x8C == i  && 0x114 == j  = "Code 32"
   | 0x8C == i  && 0x115 == j  = "Code 49"
   | 0x8C == i  && 0x116 == j  = "Code One"
   | 0x8C == i  && 0x117 == j  = "Colorcode"
   | 0x8C == i  && 0x118 == j  = "Data Matrix"
   | 0x8C == i  && 0x119 == j  = "MaxiCode"
   | 0x8C == i  && 0x11A == j  = "MicroPDF"
   | 0x8C == i  && 0x11B == j  = "PDF-417"
   | 0x8C == i  && 0x11C == j  = "PosiCode"
   | 0x8C == i  && 0x11D == j  = "QR Code"
   | 0x8C == i  && 0x11E == j  = "SuperCode"
   | 0x8C == i  && 0x11F == j  = "UltraCode"
   | 0x8C == i  && 0x120 == j  = "USD-5 (Slug Code)"
   | 0x8C == i  && 0x121 == j  = "VeriCode"
   | 0x8C == i  && 0x122 <= j && j <=0xFFFF = "Reserved"++(showihex i)++" "++(showihex j)++""
--  008D_scale.upg
   | 0x8D == i  && 0x00 == j  = "Undefined"++(showihex i)++" "++(showihex j)++""
   | 0x8D == i  && 0x01 == j  = "Weighing Device"
   | 0x8D == i  && 0x02 <= j && j <=0x1F = "Reserved "++(showihex i)++" "++(showihex j)++""
   | 0x8D == i  && 0x20 == j  = "Scale Device"
   | 0x8D == i  && 0x21 == j  = "Scale Class I Metric"
   | 0x8D == i  && 0x22 == j  = "Scale Class I Metric"
   | 0x8D == i  && 0x23 == j  = "Scale Class II Metric"
   | 0x8D == i  && 0x24 == j  = "Scale Class III Metric"
   | 0x8D == i  && 0x25 == j  = "Scale Class IIIL Metric"
   | 0x8D == i  && 0x26 == j  = "Scale Class IV Metric"
   | 0x8D == i  && 0x27 == j  = "Scale Class III English"
   | 0x8D == i  && 0x28 == j  = "Scale Class IIIL English"
   | 0x8D == i  && 0x29 == j  = "Scale Class IV English"
   | 0x8D == i  && 0x2A == j  = "Scale Class Generic"
   | 0x8D == i  && 0x2B <= j && j <=0x2F = "Reserved "++(showihex i)++" "++(showihex j)++""
   | 0x8D == i  && 0x30 == j  = "Scale Attribute Report"
   | 0x8D == i  && 0x31 == j  = "Scale Control Report"
   | 0x8D == i  && 0x32 == j  = "Scale Data Report"
   | 0x8D == i  && 0x33 == j  = "Scale Status Report"
   | 0x8D == i  && 0x34 == j  = "Scale Weight Limit Report"
   | 0x8D == i  && 0x35 == j  = "Scale Statistics Report"
   | 0x8D == i  && 0x36 <= j && j <=0x3F = "Reserved "++(showihex i)++" "++(showihex j)++""
   | 0x8D == i  && 0x40 == j  = "Data Weight"
   | 0x8D == i  && 0x41 == j  = "Data Scaling"
   | 0x8D == i  && 0x42 <= j && j <=0x4F = "Reserved "++(showihex i)++" "++(showihex j)++""
   | 0x8D == i  && 0x50 == j  = "Weight Unit"
   | 0x8D == i  && 0x51 == j  = "Weight Unit Milligram"
   | 0x8D == i  && 0x52 == j  = "Weight Unit Gram"
   | 0x8D == i  && 0x53 == j  = "Weight Unit Kilogram"
   | 0x8D == i  && 0x54 == j  = "Weight Unit Carats"
   | 0x8D == i  && 0x55 == j  = "Weight Unit Taels"
   | 0x8D == i  && 0x56 == j  = "Weight Unit Grains"
   | 0x8D == i  && 0x57 == j  = "Weight Unit Pennyweights"
   | 0x8D == i  && 0x58 == j  = "Weight Unit Metric Ton"
   | 0x8D == i  && 0x59 == j  = "Weight Unit Avoir Ton"
   | 0x8D == i  && 0x5A == j  = "Weight Unit Troy Ounce"
   | 0x8D == i  && 0x5B == j  = "Weight Unit Ounce"
   | 0x8D == i  && 0x5C == j  = "Weight Unit Pound"
   | 0x8D == i  && 0x5D <= j && j <=0x5F = "Reserved "++(showihex i)++" "++(showihex j)++""
   | 0x8D == i  && 0x60 == j  = "Calibration Count"
   | 0x8D == i  && 0x61 == j  = "Re-Zero Count"
   | 0x8D == i  && 0x62 <= j && j <=0x6F = "Reserved "++(showihex i)++" "++(showihex j)++""
   | 0x8D == i  && 0x70 == j  = "Scale Status"
   | 0x8D == i  && 0x71 == j  = "Scale Status Fault"
   | 0x8D == i  && 0x72 == j  = "Scale Status Stable at Center of Zero"
   | 0x8D == i  && 0x73 == j  = "Scale Status In Motion"
   | 0x8D == i  && 0x74 == j  = "Scale Status Weight Stable"
   | 0x8D == i  && 0x75 == j  = "Scale Status Under Zero"
   | 0x8D == i  && 0x76 == j  = "Scale Status Over Weight Limit"
   | 0x8D == i  && 0x77 == j  = "Scale Status Requires Calibration"
   | 0x8D == i  && 0x78 == j  = "Scale Status Requires Re-zeroing"
   | 0x8D == i  && 0x79 <= j && j <=0x7F = "Reserved "++(showihex i)++" "++(showihex j)++""
   | 0x8D == i  && 0x80 == j  = "Zero Scale"
   | 0x8D == i  && 0x81 == j  = "Enforced Zero Return"
   | 0x8D == i  && 0x82 <= j && j <=0xFFFF = "Reserved"++(showihex i)++" "++(showihex j)++""
--  008E_msr.upg
   | 0x8E == i  && 0x00 == j  = "Undefined "++(showihex i)++" "++(showihex j)++""
   | 0x8E == i  && 0x01 == j  = "MSR Device Read-Only"
   | 0x8E == i  && 0x02 <= j && j <=0x10 = "Reserved "++(showihex i)++" "++(showihex j)++""
   | 0x8E == i  && 0x11 == j  = "Track 1 Length"
   | 0x8E == i  && 0x12 == j  = "Track 2 Length"
   | 0x8E == i  && 0x13 == j  = "Track 3 Length"
   | 0x8E == i  && 0x14 == j  = "Track JIS Length"
   | 0x8E == i  && 0x15 <= j && j <=0x1F = "Reserved "++(showihex i)++" "++(showihex j)++""
   | 0x8E == i  && 0x20 == j  = "Track Data"
   | 0x8E == i  && 0x21 == j  = "Track 1 Data"
   | 0x8E == i  && 0x22 == j  = "Track 2 Data"
   | 0x8E == i  && 0x23 == j  = "Track 3 Data"
   | 0x8E == i  && 0x24 == j  = "Track JIS Data"
   | 0x8E == i  && 0x25 <= j && j <=0xFFFF = "Reserved "++(showihex i)++" "++(showihex j)++""
--  008F_PoS.upg
   | 0x8F == i  && 0x00 <= j && j <=0xFFFF = "Unknown"++(showihex i)++" "++(showihex j)++""
--  0090_camera.upg
   | 0x90 == i  && 0x00 <= j && j <=0xFFFF = "Unknown"++(showihex i)++" "++(showihex j)++""
--  0091_arcade.upg
   | 0x91 == i  && 0x00 <= j && j <=0xFFFF = "Unknown"++(showihex i)++" "++(showihex j)++""
--  0092_gaming.upg
   | 0x92 == i  && 0x00 <= j && j <=0xFFFF = "Unknown"++(showihex i)++" "++(showihex j)++""
--  0093-FEFF_reserved.upg
   | 0x93 <= i && i <=0xFEFF && 0x00 <= j && j <=0xFFFF = "Unknown"++(showihex i)++" "++(showihex j)++""
--  FF00-FFFF_vendor1.upg
   | 0xFF00 <= i && i <=0xFFFF && 0x00 == j  = "Undefined"++(showihex i)++" "++(showihex j)++""
   | 0xFF00 <= i && i <=0xFFFF && 0x01 <= j && j <=0x02 = "Vendor Usage"++(showihex i)++" "++(showihex j)++""
   | 0xFF00 <= i && i <=0xFFFF && 0x03 <= j && j <=0xFFFF = "Reserved"++(showihex i)++" "++(showihex j)++""
toUsageName i j =  error ("Usage Name out of bounds "++ (show i) ++ "  " ++ (show j) )

modify :: Int -> String -> String
modify 0x0 s = s
modify 0x1 s = "Change Sensitivity Absolute(" ++ s ++ ")"
modify 0x2 s = "Maximum(" ++ s ++ ")"
modify 0x3 s = "Minimum(" ++ s ++ ")"
modify 0x4 s = "Accuracy(" ++ s ++ ")"
modify 0x5 s = "Resolution(" ++ s ++ ")"
modify 0x6 s = "Threshold High(" ++ s ++ ")"
modify 0x7 s = "Threshold Low(" ++ s ++ ")"
modify 0x8 s = "Calibration Offset(" ++ s ++ ")"
modify 0x9 s = "Calibration Multiplier(" ++ s ++ ")"
modify 0xA s = "Report Interval(" ++ s ++ ")"
modify 0xB s = "Frequency Max(" ++ s ++ ")"
modify 0xC s = "Period Max(" ++ s ++ ")"
modify 0xD s = "Change Sensitivity Percent of Range(" ++ s ++ ")"
modify 0xE s = "Change Sensitivity Percent Relative(" ++ s ++ ")"
modify 0xF s = "Reserved for Vendors/OEMs(" ++ s ++ ")"
modify _ _ = error "Can not mofify"
